2017-06-21 64 views
0

我有一個XML,我試圖分解元素,以便它顯示每個元素的路徑。我已經提供了下面的代碼示例以及我想要看到的輸出結果。獲取從XML分解的元素樹

XML數據如下所示。

<a:Clients> 
    <a:Client1> 
     <a:Initial> 
      <a:FirstName>data</a:FirstName> 
      <a:LastName>data</a:LastName> 
     </a:Initial> 
     <a:FirstName>data</a:FirstName> 
     <a:MiddleName /> 
     <a:LastName>data</a:LastName> 
     <a:Title>Mr</a:Title> 
     <a:MaritalStatus>Divorced</a:MaritalStatus> 
     <a:MaidenName>data</a:MaidenName> 

我想輸出它,所以它顯示爲

客戶端/客戶端1

客戶端/客戶端1/Initilal

客戶端/客戶端1 /初始/姓

等於是我想要讓我的XML的所有元素以這個順序出現在一個大的XML文檔中。我不想要任何位於標籤之間的數據,只是元素路徑。

我已經在vs 2015 - 控制檯應用程序中編寫了以下代碼,嘗試按此順序輸出它,但它無法正常工作。使用C#代碼IM是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml; 
using System.Xml.Linq; 
using System.Xml.XPath; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XNamespace ns = "http://www.test.net/author/1.0"; 
      XDocument doc = XDocument.Load("test.xml"); 
      var allElements = doc.Descendants(); 
      foreach (var element in allElements) 
      Console.WriteLine(allElements); 
      Console.ReadLine(); 
     } 
    } 
} 

輸出IM目前得到的是:

Output

我已經看過了堆棧溢出的答案,但沒有什麼似乎正是我需要和那些我試過也沒有工作。不知道是否有更簡單的方法來做到這一點?

幫助將不勝感激

回答

0

我設法做到這一點以相反的順序:

客戶端1 /客戶

所以,我剛剛進入所有到一個列表,並以相反的順序打印出來以後要按照正確的順序。

 XDocument doc = XDocument.Load("test.xml"); 
     var allElements = doc.Descendants(); 
     var elemants = doc.Elements(); 

     foreach (var element in allElements) 
     { 
      var current = element; 
      List<string> names = new List<string>(); 
      while (current.Parent != null) 
      { 
       names.Add(current.Name.LocalName); 
       current = current.Parent; 
      } 
      names.Add(current.Name.LocalName); 
      names.Reverse(); 
      foreach(var name in names) 
       Console.Write(name + "/"); 
      Console.WriteLine(); 
     } 

我希望這就是你需要的。

+0

謝謝嗯,這就是輝煌。我也試圖輸出到一個txt文件,但沒有太多的運氣。我試過FileStream filestream = new FileStream(「out.txt」,FileMode.Create); var streamwriter = new StreamWriter(filestream); streamwriter.AutoFlush = true; Console.SetOut(streamwriter); Console.SetError(streamwriter);但它似乎沒有工作。有任何想法嗎? – FreshX

+0

嗨s.fry如果這個答案解決了你的問題,請考慮通過點擊複選標記來接受它。 只需使用console.write()的streamwriter.Write()instad; – mmm

+0

謝謝嗯,真的很有幫助,我已將你的回答標記爲答案 – FreshX