属性的节点列表

时间:2012-11-04 18:47:57

标签: c# .net linq-to-xml

我需要一个包含Descendants(Frame)的所有属性 ID (值)的列表,它具有等于的属性 SecondFeature (Descendants-ObjectClass)车辆即可。 (有节点有1个“对象”,其他2/3时间,其他没有) 这是代码的一部分:

<?xml version="1.0" encoding="utf-8" ?> 
- <Frame ID="120">
<PTZData Zoom="1.000" />
- <Object ID="5">
 <ObjectClass SecondFeature="vehicle" /> 
</Object>
</Frame>

1 个答案:

答案 0 :(得分:1)

您可以按照XPath expression

进行操作
var xml = // your XML string here
var doc = XDocument.Parse(xml);
var frameIds = doc.Root.XPathSelectElements(
        "//Frame[./Object/ObjectClass[@SecondFeature ='Vehicle']]")
    .Select(n => n.Attribute("ID").Value);

当然,如果您的Frame个节点可以不存在ID属性,那么您需要.Select中的额外空值检查。

或者,非xpath appraoch(但这是恕我直言,不太可读,并要求更加谨慎):

var frameIds = doc
    .Descendants("ObjectClass")
    .Where(n => n.Attribute("SecondFeature").Value == "Vehicle")
    .Select(n => n.Parent.Parent.Attribute("ID").Value);