根据兄弟的值选择XML元素

时间:2013-03-19 03:38:18

标签: xml linq linq-to-xml

使用Linq to XML和下面的示例XML文档,如何获得“itemColor”为蓝色的“itemType”的值?

<?xml version="1.0" encoding="utf-8" ?>
<items>
    <item>
         <itemName>my item name</itemName>
         <itemType>spoon</itemType>
         <itemColor>red</itemColor>
    </item>
    <item>
         <itemName>your item name</itemName>
         <itemType>fork</itemType>
         <itemColor>blue</itemColor>
    </item>
 </items>

2 个答案:

答案 0 :(得分:2)

var xdoc = XDocument.Load(path_to_xml);
var itemType = xdoc.Root.Elements("item")
                   .Where(i => (string)i.Element("itemColor") == "blue")
                   .Select(i => (string)i.Element("itemType"))
                   .FirstOrDefault();
// returns "fork"

另一种选择是使用XPath的单行:

var type = (string)xdoc.XPathSelectElement("//item[itemColor='blue']/itemType");

BTW ,对于使用XDocument的XPath扩展,您应该使用 System.Xml.XPath 命名空间。

答案 1 :(得分:0)

这应该可以解决问题:

XDocument doc = XDocument.Load("../../sample.xml");
var elements = from item in doc.Descendants("items").Descendants("item")
               where item.Element("itemColor").Value == "blue"
               select item.Element("itemType").Value;

顺便说一句:这是 LINQ to SQL(本例中SQL将来自哪里)但是LINQ to XML