2011-04-25 61 views
0
<Document> 
    <Heading1> 
     <text>Heading Title</text> 
     <para>para1</para> 
     <para>para2</para> 
     <para>para3</para> 
    </Heading1> 
    <Heading1> 
     <text>2nd Heading Title</text> 
     <para>para4</para> 
     <para>para5</para> 
     <para>para6</para> 
     <Heading2> 
       <text>3rd Heading Title</text> 
       <para>para4</para> 
       <para>para5</para> 
     </Heading2>  
    </Heading1> 
</Document> 

這是XML文檔。現在,我想用C#(4.0)解析這個XML文件。在這裏,我想獲取所有Heading1元素,而不是在我的程序中使用該元素名稱。例如,請勿使用document.GetElementsByTagName("Heading1");。我如何得到它。指導我擺脫這個問題。如何使用C#和XML獲取根元素的直接子元素?

謝謝&此致敬禮。

回答

2

使用LINQ to XML,你可以這樣做:

var headings = yourXDocument.Root.Elements(); 

使用的Nodes()代替Elements()也將返回文本節點和註釋,這顯然不是你想要的。

+0

啊,'Elements()'在這裏更合適。 – 2011-04-25 06:57:25

2

如果使用LINQ to XML,則可以通過Elements()方法訪問文檔或元素的子元素。

XDocument doc = ...; 

var query = doc.Root.Elements(); 
+0

不會'doc.Elements()'返回文檔元素(''這裏)而不是它的子元素(''here)? – 2011-04-25 07:01:57

+0

@Frédéric:你說得對。感謝您指出了這一點。 – 2011-04-25 07:03:59

1
XmlDocument doc = new XmlDocument(); 
doc.Load(xmlFile); 

foreach(XmlNode node in xmlDoc.ChildNodes) 
{ 
     Console.WriteLine(node.Name); 
} 
1

如果您使用XmlDocument,這個工程:

var elements = doc.SelectNodes("/*/*"); 

這發現不論任何自己的名字的頂級元素的所有子元素。指定名稱通常比較安全,因爲具有意外名稱的元素不會返回到您的列表中 - 請使用/Document/Heading1來執行此操作。