簡體   English   中英

從XML分解元素樹

[英]Getting an element tree broken down from an 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#代碼是:

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();
        }
    }
}

我目前得到的輸出是:

產量

我已經在Stack Overflow上尋找了答案,但似乎沒有什么是我真正需要的,而我嘗試過的也沒有用。 不確定是否有更簡單的方法可以做到這一點?

幫助將不勝感激

我設法以相反的順序進行操作:

客戶端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();
        }

我希望這就是您所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM