我正在尝试阅读各种类型的XML文件,并且在每个xml类型中,根名称和所有其他标记可能会更改。我需要列出所有的xml标签,但我无法成功阅读。
这是xml类型之一。
<?xml version="1.0" encoding="ISO-8859-9"?>
<ITEMS>
<ITEM DBOP="INS" >
<CARD_TYPE>11</CARD_TYPE>
<CODE>MALZ1</CODE>
<NAME>MALZ1</NAME>
</ITEM>
</ITEMS>
还有另外一个
<?xml version="1.0" encoding="ISO-8859-9"?>
<CLCARDS>
<CLCARD DBOP="INS" >
<CARD_TYPE>11</CARD_TYPE>
<CODE>CLCARD1</CODE>
<NAME>CLCARD1</NAME>
</CLCARD>
</CLCARDS>
我尝试了下面的代码,但没有列出所有
string xml = txtXml.Text;
XDocument xdoc = XDocument.Parse(xml);
txtResult.Text = xdoc.Root.Name.ToString() + Environment.NewLine;
foreach (XElement element in xdoc.Elements())
txtResult.Text += element.Name.ToString() + Environment.NewLine;
它刚刚列出了第一个xml的标签
items
items
我想列出如下
items
item
card_type
code
name
如何用LINQ获得这样的结果?
答案 0 :(得分:3)
嗯,您可以使用Descendants()
方法获取所有元素:
foreach (var element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
然而,这不会做任何缩进。如果你想要缩进,你可以使用类似的东西:
public static int GetDepth(XElement element)
{
return element.Ancestors().Count();
}
然后:
foreach (var element in xdoc.Descendants())
{
Console.WriteLine("{0}{1}",
new string(' ', GetDepth(element)),
element.Name);
}