2015-01-20 109 views
0

我有一个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> 

我想用C#来获得每个type = "session"的路径在文档中的列表。目前,我有一个函数来获取路径XPath。但是我完全不知道如何在所有XML中搜索,而不管节点。

我使用LINQ to XML,.NET框架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)); 
    } 
+1

没有很好地形成你的XML。 – 2015-01-20 22:56:13

+0

@HamletHakobyan是的,你是对的。我的问题中的问题不是真正的问题,大约需要2分钟才能做出更一般的案例......我错过了一些重要的事情。 – 2015-01-21 16:18:32

回答

1

您可以使用doc.Descendants()来获取所有后代元素:

IEnumerable<XElement> path = 
    from element in doc.Descendants() 
    where (string)element.Attribute("type") == "session" 
    select element; 
+0

它似乎工作,谢谢。 – 2015-01-21 14:01:36

+0

你知道'XMLDocument'会是什么吗? – 2015-01-22 21:59:42

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> 

+0

是的,你是对的。我的问题中的问题不是真正的问题,大约需要2分钟才能做出更一般的案例......我错过了一些重要的事情。 – 2015-01-21 13:54:08

相关问题