XElement.Elements()返回空集合

时间:2016-07-26 13:28:50

标签: c# xml

我试图从我从db通知接收的XElement中获取值。 xml结构如下:

<?xml version="1.0"?>
<root>
    <inserted>
        <row>
            <CODI_AVERIA>22</CODI_AVERIA>
            <NUMERO_LINIA>2</NUMERO_LINIA>
            <DIA>2016-07-17T00:00:00</DIA>
            <HORA>1899-12-30T10:26:15.790</HORA>
            <CODI_USUARI>1</CODI_USUARI>
            <ACCIO>0</ACCIO>
            <CODI_PSEUDO>-1</CODI_PSEUDO>
        </row>
    </inserted>
</root>

这是我用来获取数据的方法,它返回一个空的List。

static void getAccio(XElement xml)
{
    try
    {
        xml.Descendants("deleted").Remove();

        var items = xml.Elements("row").Select(n => new
        {
            Codi_averia = n.Element("CODI_AVERIA").Value,
            Numero_linia = n.Element("NUMERO_LINIA)").Value,
            Accio = n.Element("ACCIO").Value
        }).ToList();
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }
}

我试图将每个字段的值分开,但它不允许我像XElements那样将它们分开。

3 个答案:

答案 0 :(得分:0)

使用.Descendants()代替.Elements()

var items = xml.Descendants("row").Select(n => new
    {
        Codi_averia = n.Element("CODI_AVERIA").Value,
        Numero_linia = n.Element("NUMERO_LINIA)").Value,
        Accio = n.Element("ACCIO").Value
    }).ToList();

.Elements只找到那些直接后代的元素,即直接孩子。 - 我假设您的XElementinserted部分的父级。

.Element.Descendants see this question

之间的差异

如果您不想在所有内部元素中找到它们,请执行.Element("inserted").Elements("rows")

答案 1 :(得分:0)

您的文档没有名称为row的根元素。相反,您需要先选择inserted,然后枚举row的{​​{1}}元素:

inserted

答案 2 :(得分:0)

在您的示例代码中("NUMERO_LINIA)")因为附加引号和括号而错误。

这对我有用:

XDocument xd = XDocument.Load("XMLFile1.xml");

var lst = (from n in xd.Descendants("row")
           select new
           {
                 Codi_averia = n.Element("CODI_AVERIA").Value,
                 Numero_linia = n.Element("NUMERO_LINIA").Value,
                 Accio = n.Element("ACCIO").Value
           }).ToList();

foreach (var item in lst)
     Console.WriteLine(string.Format("{0}{1}{2}", item.Codi_averia, item.Numero_linia, item.Accio));