2010-08-20 65 views
1

我必须分析我当前项目中的很多XML文件。
我将XML文件作为string对象获取。
我写了一个方法来检查XML字符串是否包含任何数据。有没有更快的方法来检查XML文件的文档元素下的子元素的存在

private bool ContainsXmlData(string xmlString) 

{ 如果(string.IsNullOrEmpty(的xmlString)) 返回false; XmlDocument Doc = new XmlDocument(); 尝试 { Doc.LoadXml(xmlString); } catch(XmlException) { return false; } if(!Doc.DocumentElement.HasChildNodes) return false; 返回true; }

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

编辑

我已经做了新的方法与XPathDocumentXPathNavigator。感谢米奇小麦和Kragen :)

private bool ContainsXmlData(string xmlString) 

{ 如果(string.IsNullOrEmpty(的xmlString)) 返回false; 尝试 StringReader Reader = new StringReader(xmlString); XPathDocument doc = new XPathDocument(Reader); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator iter = nav.Select(“/”); return(iter.Count> 0)?真假; } catch(XmlException) { return false; } }

+0

贵'xmlString'始终具有相同的根节点?例如''?或者根可以不同? – 2010-08-20 11:06:04

+0

@DHoerster它可以不同 – peter 2010-08-20 11:14:24

回答

3

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

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

+0

不幸的是XPath是没有选择的,因为目前还不知道文档元素和子元素的名称。 我会检查出XmlTextReader。感谢您提供更多信息的链接:) – peter 2010-08-20 11:10:21

+2

@peter您不需要知道子元素的名称 - 您可以使用通配符。我相信'*/*'应该做的伎俩(未经测试) – Justin 2010-08-20 11:11:55

+0

@kragen感谢您的提示。没有想到这一点。将尽快发布我的解决方案 – peter 2010-08-20 11:51:45

相关问题