我有一个XML文档:
<Results>
<ResultSet "nothing special" Description="More of nothing" type="system">
<Results1>
<time>
<Body type="system" datatype="int"></Body>
<att2 type="session" datatype="float"></att2>
</Result>
<Result>
<ID type="system" datatype="int"></ID>
<Stuff type="session" datatype="float"></Stuff>
</Result>
<Result>
<att1 type="system" datatype="int"></att1>
<att2 type="session" datatype="int"></att2>
</Result>
</Results1>
<Results2>
<time>
<att1 type="session" datatype="int"></att1>
<att2 type="system" datatype="float"></att2>
</Result>
<Result>
<ID type="system" datatype="float"></ID>
</Result>
</Results2>
</ResultSet>
</Results>
我想使用C#获取列表中文档中每个type = "session"
的路径。目前,我有一个函数来获取路径XPath
。但我完全不知道如何搜索所有XML,无论节点如何。
我正在使用LINQ to XML,.NET framework 3.5,这就是我现在所拥有的:
List<string> pathList = new List<string>();
IEnumerable<XElement> path =
from element in doc.Elements(/*I don't know*/)
where (string)element.Attribute("type") == "session"
select element;
foreach (XElement element in path)
{
pathList.Add(getPath(element));
}
答案 0 :(得分:2)
您的XML没有单一的XML属性。您拥有的只是包含文本内容的元素。
你的意思是:
<Results>
<ResultSet "nothing special" Description="More of nothing" type="system">
<Results1>
<time>
<Body type="system" datatype="int"></Body>
<att2 type="session" datatype="float"></att2>
</Result>
<Result>
<ID type="system" datatype="int"></ID>
<Stuff type="session" datatype="float"></Stuff>
</Result>
<Result>
<att1 type="system" datatype="int"></att1>
<att2 type="session" datatype="int"></att2>
</Result>
</Results1>
<Results2>
<time>
<att1 type="session" datatype="int"></att1>
<att2 type="system" datatype="float"></att2>
</Result>
<Result>
<ID type="system" datatype="float"></ID>
</Result>
</Results2>
</ResultSet>
</Results>
...
答案 1 :(得分:1)
您可以使用doc.Descendants()
获取所有后代元素:
IEnumerable<XElement> path =
from element in doc.Descendants()
where (string)element.Attribute("type") == "session"
select element;