2012-06-28 73 views
0

我正在寻找一种很好的方法,通过XML文档递归而不指定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。我发布的代码的问题是将元素的文本捆绑在一起。所以我可以在另一个过程中匹配元素名称,并将其设置为等于文本的值。所以我可以使用约定来进行映射。

回答

1

任何原因你不只是想XDocument.Descendants()?我不记得这是否是广度优先或深度优先,但它会找到递归文档中的所有元素......你样本代码使用XmlElementXmlText,但你标签

注说xdocument。我首先看到了标签,这导致我认为你正在使用LINQ to XML。如果你是而不是使用LINQ to XML,但可以这样做,我建议你这样做。这不是完全清楚你真正想做的事,但如果你只是需要打印的所有元素的文本,那真的很容易:

foreach (var element in doc.Descendants()) 
{ 
    Console.WriteLine(element.Value); 
} 

当然会写“空”元素的空行 - 如果你想避免这种情况,你可以在写入控制台前进行检查。

+0

完美,谢谢。我忘记了后代,大部分的例子都在使用xpath和xquery。 – PMOrion