在C#中通过ID获取XML元素

时间:2013-05-18 02:38:05

标签: c# xml linq xelement

XML

<?xml version="1.0" encoding="utf-8" ?> 
<animals>
    <animal id="fisrt">
        <type>Dog</type>
        <name>Han</name>
    </animal>
    <animal id="second">
        <type>Cat</type>
        <name>Leia</name> 
    </animal>
</animals>

C#

using System.Xml.Linq;

string id = "second";
var filter = from ab in element.Elements("animal") where ab.Attribute("id").Equals(id) select ab;
foreach (XElement selector in filter)
{
    label1.Content = selector.Element("name").Value;
}

我需要帮助的是根据父元素的id选择元素。我们的目标是选择父母的ID是&#34;第二&#34;的名称,因此我试图获得&#34; Leia&#34;。我遇到的问题是标签没有发生任何事情。

我做错了什么以及如何解决这个问题。如果有人知道更好的方法来实现我的目标,我也会采取不同的方法。

2 个答案:

答案 0 :(得分:1)

您错过了检查属性的值:

where ab.Attribute("id").Value.Equals(id)

希望这有帮助!

答案 1 :(得分:-1)

这个怎么样:

string name = xdoc.Elements("animal")
     .Where (e=>e.Attribute("id")=="first")
     .Elements("name")
     .Select(e=>e.Value)
     .FirstOrDefault();

基本上,您希望将id属性的条件放在where中并继续查询。

我知道这是方法注释而不是linq语法,我更喜欢它,因为当事情变得毛茸茸时更容易阅读。