LINQ TO XML基于多个条件获取节点

时间:2012-01-22 13:15:02

标签: xml linq

如何根据xID&&获取节点“FieldName”?通过LINQ TO XML进行dID。 注意:dID可能存在也可能不存在。 我到目前为止所尝试的内容如下所示。 但是,当dID不存在时,我的代码不处理条件

<Configuration>
        <Contract xID="2">
            <Document dID="227">
                <FieldName name="AAAA"/>
                <FieldName name="BBBB"/>
            </Document>
        </Contract>
        <Contract xID="5">

                <FieldName nam`enter code here`e="CCCC"/>
                <FieldName name="DDDD"/>

        </Contract>
    </Configuration>

我到目前为止所尝试的内容如下所示。 但是,当dID不存在时,我的代码不处理条件

    XDocument xmlDoc = XDocument.Load("../../FieldConfiguration.xml");

    var fieldNames = (from n in xmlDoc.Descendants("Contract")
                      where (int)n.Attribute("xID") == 5 &&
                            (int)n.Element("Document").Attribute("dID") == 227
                      from f in n.Element("Document").Elements()
                      select (string) f.Attribute("name")).ToList();

    foreach (string name in fieldNames)
    {
        Console.WriteLine("Site: " + name);
    }

1 个答案:

答案 0 :(得分:0)

只需在where子句

中添加null检查
XDocument xmlDoc = XDocument.Load("../../FieldConfiguration.xml");

    var fieldNames = (from n in xmlDoc.Descendants("Contract")
                      where (int)n.Attribute("xID") == 5 &&
                            n.Element("Document").Attribute("dID") != null && 
(int)n.Element("Document").Attribute("dID") == 227
                          from f in n.Element("Document").Elements()
                          select (string) f.Attribute("name")).ToList();

    foreach (string name in fieldNames)
    {
        Console.WriteLine("Site: " + name);
    }