繁体   English   中英

C#XML解析-搜索特定元素

[英]C# XML Parsing - Searching for specific elements

我在C#.net 4.0中使用XMLReader来搜索一小段XML。 我想在XML中找到特定的元素,并且正在使用XMLReader.ReadToFollowing("name")方法来查找元素。 我不知道这些元素在XML文档中的顺序。 它们处于差异顺序或完全缺失。 顺序对我来说并不重要,但是如果缺少该元素,我将抛出异常。

XMLReader仅向前,因此,如果我要查找的第一个元素是XML文档中的最后一个值,则其他读取将失败。

我正在考虑为每个搜索创建一个新的XMLReader。 我只有很少的元素集,而且XML也不是很大,所以我认为不会有太多开销,但是我可能是错的。

当您不知道元素的顺序时,是否有更好的库可用于搜索XML? 还是XML缺乏顺序违反了XML规范?

具体来说,假设我有一些简单的XML。 一个头和十个孩子。

<sometag>
     <element1>data</element1>
     <element2>data</element2>
     .
     .
     .
     <element10>data</element10>
</sometag>

打开5个XMLReader来查找那些元素是否效率低下? 我还可以使用一个阅读器并逐步遍历每个元素,但随后我需要跟踪找到的元素。

可以使用XDocument (linq2xml)代替XMLReader,而快速又轻松地执行此操作(通过Element方法):

var doc = XDocument.Load(xmlFilePath);
var element1 = doc.Element(searchItemName);
if (element1 == null) throw ...
...
return ....;

您可以根据需要多次调用它,而无需重新加载xml文件。

尝试使用XPath。 它快得多,并且对元素的顺序(仅是层次结构)不敏感。

MSDN文档: http : //msdn.microsoft.com/zh-cn/library/ms256086.aspx

使用XPath进行编程确实需要一些学习。 并且,如果您的XML指定了名称空间,则需要确保将其包含在XPath查询中。

您具有.NET 4.0,因此请使用Linq到XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM