按属性搜索XML元素(C#)

时间:2011-12-31 08:07:03

标签: c# xml

我正在尝试检查XML元素的特定属性,以便我可以避免保存重复的元素条目。 XML看起来或多或少像这样:

    <root>
      <artist name="Coldplay">
        <track name="yellow" artist="Coldplay" url="coldplay.com/yellow" playCount="123" />
        <track name="fix you" artist="Coldplay" url="coldplay.com/fixyou" playCount="135" >
      </artist>
      //ect.
    </root>
谷歌和各种搜索结果提示类似

[@id='foo'] 

但是我不知道是什么,并且由于原因可能对你来说比对我更明显,我不能“谷歌”这样的特殊字符集合而不会得到奇怪的结果。因此,如果任何人都可以提出if if checking声明的建议,我将非常感激!或者在C#中如何使用特殊字符的名称或链接。

2 个答案:

答案 0 :(得分:2)

这是一个XPath表达式。您可以在c#中使用它们以及各种与XML相关的对象。

XmlDocument xd = new XmlDocument();
xd.LoadXml( xmlString );

XmlNodeList nodes = xd.SelectNodes( "//root/artist/track[@name='yellow']" );

一般参考:http://msdn.microsoft.com/en-us/library/ms256086.aspx

使用LINQ的XPath:http://msdn.microsoft.com/en-us/library/bb675183.aspx

答案 1 :(得分:1)

那是XPath expression - 但就个人而言,我会使用LINQ to XML进行搜索:

XDocument doc = XDocument.Load("test.xml");

var track = doc.Descendants("track")
               .Where(t => (string) t.Attribute("id") == "foo")
               .FirstOrDefault();

(如果您愿意,请使用SingleSingleOrDefaultFirst等。)