3

我需要具有等于Vehicle的属性SecondFeature (Descendants-ObjectClass) 的 Descendants(Frame) 的所有属性ID(值)的列表。(有一个节点有 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>
4

1 回答 1

1

您可以使用以下XPath 表达式来做到这一点:

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方法(但恕我直言,这不太可读,需要更加谨慎):

var frameIds = doc
    .Descendants("ObjectClass")
    .Where(n => n.Attribute("SecondFeature").Value == "Vehicle")
    .Select(n => n.Parent.Parent.Attribute("ID").Value);
于 2012-11-04T19:16:56.897 回答