2

我正在使用XMLReaderC# .net 4.0 来搜索一小段 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 来查找这些元素会不会效率低下?我也可以使用一个阅读器并逐步浏览每个元素,但是我需要跟踪我找到了哪些元素。

4

3 回答 3

4

您可以使用XDocument(linq2xml)而不是 XMLReader,快速轻松地(通过Element方法):

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

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

于 2012-06-19T19:26:06.977 回答
0

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

MSDN 文档:http: //msdn.microsoft.com/en-us/library/ms256086.aspx

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

于 2012-06-19T19:22:09.893 回答
0

你有 .NET 4.0,所以使用 Linq to XML。

于 2012-06-19T19:26:10.513 回答