2017-02-09 226 views
2

我有XML文件:如何使用XDocument讀取xml文件?

<?xml version="1.0" encoding="UTF-8"?> 
    <root lev="0"> 
     content of root 
     <child1 lev="1" xmlns="root"> 
      content of child1 
     </child1> 
    </root> 

和下面的代碼:

 XDocument xml = XDocument.Load("D:\\test.xml"); 

     foreach (var node in xml.Descendants()) 
     { 
      if (node is XElement) 
      { 
       MessageBox.Show(node.Value); 
       //some code... 
      } 
     } 

我得到的消息:的child1

child1

內容rootcontent的

內容

但我需要消息:根

內容的child1

內容如何解決?

+1

的可能的複製[LINQ to XML - 獲取給定的XElement的文本內容,但沒有子元素的文本內容](http://stackoverflow.com/questions/10302158/linq-to-xml-get-given-xelements-text-content-without-child- elements-text-con) – Fabio

回答

0

嘗試用foreach(XElement node in xdoc.Nodes())代替。

1

元素的字符串值是凡在其(包括子元素中的文本的

如果你想獲得每個非空文本節點的值:

XDocument xml = XDocument.Load("D:\\test.xml"); 

foreach (var node in xml.DescendantNodes().OfType<XText>()) 
{ 
    var value = node.Value.Trim(); 

    if (!string.IsNullOrEmpty(value)) 
    { 
     MessageBox.Show(value); 
     //some code... 
    } 
} 
+0

@CharlesMager謝謝你指出。 – JLRishe

+0

很好的答案,但我也需要XElement ... – SQLprog

+0

@SQLprog你還沒有說清楚你實際上想做什麼,所以我不知道除了這個之外還有什麼建議。 – JLRishe

1

我被代碼所需要的結果:

XDocument xml = XDocument.Load("D:\\test.xml"); 

foreach (var node in xml.DescendantNodes()) 
{ 
    if (node is XText) 
    { 
     MessageBox.Show(((XText)node).Value); 
     //some code... 
    } 
    if (node is XElement) 
    { 
     //some code for XElement... 
    } 
} 

感謝關注