-1

递归调查 XML 的建议方法是什么?
XMLReader///其他选项 XMLDocumentXMLTextReader

我有点困惑,为什么我们有这么多读取 XML 的方法。

重要提示:我有一个约束,即 Xml 读取对象应该能够从给定的Stream引用对象创建自己。

4

2 回答 2

3

两者都XDocument支持XmlDocument文档的随机访问,因此支持节点层次结构的双向遍历。因此,对于递归方法,其中任何一个都是不错的选择。

XDocument专为使用 LINQ 而设计,而XmlDocument在使用 XPath 查询文档时更方便。这真的是一个偏好问题和你当时需要的东西。两者都是同样有效的选项,并提供非常相似的功能。

XMLTextReader效率更高,因为它只是一次从流中读取一个节点,而不验证整个文档图。但是,它是仅向前的,因此您无法遍历节点树以返回父节点,因此它可能不是您正在做的事情的好选择。

XMLReaderXMLTextReader(以及其他)的抽象基类,因此不能直接使用。

更新

由于您在上面的评论中提到,您真正想做的就是找到所有叶元素,因此您根本不需要使用递归。您可以利用 LINQ 或 XPath 为您完成所有工作。既然你说你不想使用 LINQ,下面是如何通过 XPath 来做到这一点XmlDocument

XmlNodeList leafElements = doc.SelectNodes("//*[not(node())]");

或与XDocument

IEnumerable<XElement> leafElements = doc.XPathSelectNodes("//*[not(node())]");
于 2012-12-22T13:17:39.853 回答
1

我自己一直偏爱XDocument。您想使用XDocument.Load(Stream)(或其重载之一)从流中读取数据。

于 2012-12-22T13:13:33.377 回答