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 を開くのは非効率でしょうか? 1 つのリーダーを使用して各要素をステップ実行することもできますが、その場合は、見つけた要素を追跡する必要があります。

4

3 に答える 3

4

(linq2xml)を使用できる XMLReader の代わりに、 (メソッドXDocumentによって) 高速かつ簡単に実行します。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 に答える