如何选择后代具有特殊属性的元素

时间:2014-04-08 11:05:30

标签: xml linq-to-xml

我坚持写一个Linq到XML选择,希望你能帮助我。

我的XML如下所示:

<myXML>
    <parent>
        <child name="ID">0</child>
        <child name="Name">Test 1</child>
    </parent>
    <parent>
        <child name="ID">1</child>
        <child name="Name">Test 2</child>
    </parent>
    <parent>
        <child name="ID">0</child>
        <child name="Name">Test 3</child>
    </parent>
    <parent>
        <child name="ID">2</child>
        <child name="Name">Test 4</child>
    </parent>
</myXML>

我尝试选择所有父元素,其中包含属性ID = 0的子元素,以便我得到以下内容:

<parent>
    <child name="ID">0</child>
    <child name="Name">Test 1</child>
</parent>
<parent>
    <child name="ID">0</child>
    <child name="Name">Test 3</child>
</parent>

XML非常大,因此选择应该是高性能的。谢谢你的帮助!!!

此致

2 个答案:

答案 0 :(得分:0)

试试这个:

var query =
    from p in xd.Root.Elements("parent")
    where p
        .Elements("child")
        .Any(c =>
            c.Attribute("name").Value == "ID"
            && c.Value == "0")
    select p;

答案 1 :(得分:0)

将文档加载/解析为XDocument后,为了提高性能,我会使用XPath,如下所示

var elements = document
   .XPathSelectElements("/myXML/parent[normalize-space(child[@name='ID'])='0']");

即。 “查找包含parent元素的所有child元素,其中属性名称为ID,修剪后的值为0”