簡體   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