我正在寻找一种在不指定XPATH或XQUERY表达式的情况下通过XML文档进行递归的好方法。刚刚从根节点开始。我需要坚持节点的元素和文本。
类似于:
private void RecurseXml(XmlNode root)
{
if (root is XmlElement)
{
Console.WriteLine(root.Name);
if (root.HasChildNodes)
RecurseXmlDocument(root.FirstChild);
if (root.NextSibling != null)
RecurseXmlDocument(root.NextSibling);
}
else if (root is XmlText)
{
string text = ((XmlText)root).Value;
Console.WriteLine(text);
}
递归过程确定他们是否是孩子而不是使用xpath。我发布的代码的问题是将元素的文本绑在一起。所以我可以在我拥有的另一个进程中匹配元素名称,并将其设置为等于文本的值。所以我可以使用约定来进行映射。
答案 0 :(得分:1)
您是否只想XDocument.Descendants()
?我不记得那是广度优先还是深度优先,但它会递归地找到文档中的所有元素......
请注意,您的示例代码使用XmlElement
和XmlText
,但标记代表xdocument
。我首先看到了标签,这使我认为你正在使用LINQ to XML。如果你不使用LINQ to XML但是可以这样做,我建议你这样做。目前还不完全清楚你真正想要做什么,但如果只是需要打印所有元素的文本,那真的很容易:
foreach (var element in doc.Descendants())
{
Console.WriteLine(element.Value);
}
当然这会为“空”元素写一个空行 - 如果你想避免这种情况,你可以在写入控制台之前进行检查。