我在C#.net 4.0中使用XMLReader
来搜索一小段XML。我想在XML中找到特定元素,我正在使用XMLReader.ReadToFollowing("name")
方法来查找元素。我不知道XML文档中元素的顺序;它们处于不同的顺序或完全缺失。顺序对我来说无关紧要,但如果元素丢失,我会抛出异常。
XMLReader只是转发,所以如果我要查找的第一个元素是XML文档中的最后一个值,则其他读取将失败。
我在考虑为每次搜索创建一个新的XMLReader。我只有一小部分要查找的元素,而且XML并不大,所以我认为不会有太大的开销,但我可能是错的。
当您不知道元素的顺序时,是否有更好的库用于搜索XML?或者XML缺乏顺序违反了XML规范?
具体来说,假设我有一些简单的XML。一个头和10个孩子。
<sometag>
<element1>data</element1>
<element2>data</element2>
.
.
.
<element10>data</element10>
</sometag>
打开5个XMLReader来查找这些元素是否效率低下?我也可以使用一个阅读器并逐步浏览每个元素,但随后我需要跟踪我找到的元素。
答案 0 :(得分:4)
您可以使用XDocument
(linq2xml)代替XMLReader,快速轻松地完成(通过Element
方法):
var doc = XDocument.Load(xmlFilePath);
var element1 = doc.Element(searchItemName);
if (element1 == null) throw ...
...
return ....;
您可以在不重新加载xml文件的情况下随时调用它。
答案 1 :(得分:0)
尝试使用XPath。它更快,对元素的顺序(仅层次结构)不敏感。
MSDN文档: http://msdn.microsoft.com/en-us/library/ms256086.aspx
使用XPath进行编程确实需要一些学习。如果您的XML指定了命名空间,则需要确保将其包含在XPath查询中。
答案 2 :(得分:0)
您拥有.NET 4.0,因此请使用Linq to XML。