当你不知道XML结构是什么时(使用c#),有没有办法迭代XDocument? 当你知道结构时有很多例子,比如这个问题的答案:C# - Select XML Descendants with Linq和C# Foreach XML Node
我已经尝试了后代(“A”),其中A是下面的示例 - 在我的foreach中返回一个元素,其名称为根,值为'所有值并入一个字符串'
我这样做的原因是匿名化我知道名字的某些节点。 我正在加载的XDocument可以是任何形状 - 所以我决定只创建一个用户可以添加到包含这些敏感元素的列表。
我想避免的解决方案是用户为敏感字段创建XPath。
XML也很敏感所以我不能在字面上分享,但是一个例子(总共5个)会看起来。
<A>
<B>
<C>
<D>
<dee>value1</dee>
<doo>value2</doo>
<date>value3</date>
<time>value4</time>
</D>
</C>
</B>
<E>
...ommited..this doc is 5000 lines long with 500~ unique node names
</E>
............
</A>
那么有没有一种方法可以在不使用后代的情况下进行迭代?
答案 0 :(得分:0)
使用.Descendants()迭代每个元素。
xmlDoc.Root.Descendants()
.ToList()
.ForEach(e => Console.WriteLine(e.Name));
答案 1 :(得分:0)
这就是我的方式。
后代意味着您事先了解节点的结构。即使有一个空方法调用后代(它应该从根目录获取所有东西)也没有给我我期待的东西。
下面的代码应该适用于任何XML文档,而不需要知道结构。
XmlDocument doc = new XmlDocument();
doc.Load(file);
using (XmlReader reader = new XmlNodeReader(doc))
{
while (reader.Read())
{
currentNodeName = reader.Name;