我有一个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
Clients / Client1 / 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的答案,但似乎没有什么是我需要的,我尝试过的也没有用。不确定是否有更简单的方法来做到这一点?
非常感谢帮助
答案 0 :(得分: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();
}
我希望那就是你所需要的。