【问题标题】:Is there a faster way to check existence of child elements under the document element of an XML file是否有更快的方法来检查 XML 文件的文档元素下是否存在子元素
【发布时间】:2011-04-01 14:37:22
【问题描述】:

我必须分析当前项目中的大量 XML 文件。
我将 XML 文件作为 string 对象获取。
我编写了一个方法来检查 XML 字符串是否包含任何数据。

private bool ContainsXmlData(string xmlString)

{ if (string.IsNullOrEmpty(xmlString)) 返回假; XmlDocument Doc = new XmlDocument(); 尝试 { Doc.LoadXml(xmlString); } 捕捉(XmlException) { 返回假; } 如果(!Doc.DocumentElement.HasChildNodes) 返回假; 返回真; }

有没有办法更快地执行此检查?是否可以在不使用XmlDocument 的情况下进行检查?

编辑

我用XPathDocumentXPathNavigator 做了一个新方法。感谢 Mitch Wheat 和 Kragen :)

private bool ContainsXmlData(string xmlString)

{ if (string.IsNullOrEmpty(xmlString)) 返回假; 尝试 { StringReader Reader = new StringReader(xmlString); XPathDocument doc = new XPathDocument(Reader); XPathNavigator 导航 = doc.CreateNavigator(); XPathNodeIterator iter = nav.Select("/"); 返回(iter.Count > 0)?真假; } 捕捉(XmlException) { 返回假; } }

【问题讨论】:

  • 您的xmlString 是否始终具有相同的根节点?例如,<myRoot></myRoot>?或者根可以不同吗?
  • @DHoerster 可以不一样

标签: c# xml


【解决方案1】:

XPathDocument 使用 XPath 提供对 XML 文档内容的快速只读访问。

或使用XmlTextReader最快),它提供对 XML 数据的快速、只进、非缓存访问。

【讨论】:

  • 不幸的是,XPath 不是选项,因为此时不知道文档元素和子元素的名称。我将检查 XmlTextReader。感谢您提供更多信息的链接:)
  • @peter 您不需要知道子元素的名称 - 您可以使用通配符。我相信*/* 应该可以解决问题(未经测试)
  • @kragen 感谢您的提示。没想到。我完成后会尽快发布我的解决方案
猜你喜欢
  • 2014-11-15
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多