этот вопрос старый, но я думаю, что нашел лучшее решение для границы в регулярных выражениях с символами unicode. Используя XRegExp, вы можете реализовать допустимую границу \ b, расширяющую это
XRegExp('(?=^|$|[^\\p{L}])')
, результат имеет длину 4000+, но, похоже, работает довольно эффективно.
Некоторые объяснения: ( ? =) - это просмотр с нулевой длиной, который ищет начальную или конечную границу или небуквенный символ Юникода. Самое главное - это взгляд, потому что \ b ничего не захватывает: это просто правда или ложно.
Вы можете использовать методы из System.Xml.XPath.Extensions, чтобы сделать это.
Например, если вы хотите выбрать один элемент, вы должны использовать XPathSelectElement ():
var element = xDocument.XPathSelectElement("/DatiBeniServizi/DettaglioLinee/CodiceArticolo/CodiceValore");
или использовать свой подход - вам нужно установить полный путь
var results = xDocument.Descendants("DatiBeniServizi").Select(x => new {
Codice = (string)x.Elements("DettaglioLinee").Elements("CodiceArticolo").Elements("CodiceValore").FirstOrDefault()?.Value,
Descrizione = (string)x.Elements("DettaglioLinee").Elements("Descrizione").FirstOrDefault()?.Value,
Quantita = (string)x.Elements("DettaglioLinee").Elements("Quantita").FirstOrDefault()?.Value,
PrezzoUnitario = (string)x.Elements("DettaglioLinee").Elements("PrezzoUnitario").FirstOrDefault()?.Value,
AliquotaIVA = (string)x.Elements("DettaglioLinee").Elements("AliquotaIVA").FirstOrDefault()?.Value
}).ToList();
Это еще один подход, но я не знаю, как использовать, я знаю, это смешно ..
public class Articolo
{
public varID codici { get; set; }
public string varDescrizione { get; set; }
public string varPrezzoUnitario { get; set; }
public int varQuantita { get; set; }
public string varAliquotaIVA { get; set; }
}
public class varID
{
public List<codicearticolo> codice = new List<codicearticolo>();
}
public class codicearticolo
{
public string varcodicetipo { get; set; }
public string varcodicevalore { get; set; }
}
private List<Articolo> GetArticoloList()
{
//This method converts an xml file into a .csv file
XDocument xDocument = XDocument.Load(@"c:\ft\test.xml");
StringBuilder dataToBeWritten = new StringBuilder();
var results = from x in xDocument.Descendants("DatiBeniServizi")
select new Articolo
{
codici = new varID()
{
codice = new List<codicearticolo>(from code in x.Descendants("CodiceArticolo")
select new codicearticolo
{
varcodicetipo = code.Element("CodiceTipo").Value,
varcodicevalore = code.Element("CodiceValore").Value
})
},
varDescrizione = x.Element("Descrizione").Value,
varPrezzoUnitario = x.Element("PrezzoUnitario").Value,
varQuantita = Convert.ToInt32(x.Element("Quantita").Value),
varAliquotaIVA = x.Element("AliquotaIVA").Value
};
return results.ToList();
}