2011-05-23 10 views
0

XMLドキュメントがあり、特定の属性値(4つの番号)に基づいて特定のノードを見つける必要がある場合(パフォーマンスに関して) -XmlDocment - XPathを使用してフィルタリングすることによってノードを取得する方法

a)XML文書(XPath)をフィルタリングして属性値のいずれかと一致するノードリストを取得し、フィルタリングされたノードリストを通過して、If-elseを使用して特定の属性値を持つノードを取得します。

b)属性値ごとにXML文書(XPath)を個別にフィルタリングします。

<Nodes> 
    <a class="myclass" type="type1">some text</a> 
    <a class="myclass" type="type2">some text</a> 
    <img src = "myGraphic.jpg?id={Guid}"/> 
</Nodes> 

私は(間違って:-)かもしれません)以下のXPath

"//A[@class] | //a[@class] | //IMG[@src] | //img[@src]" 

目標は、すべての有するタイプ=「TYPE1」の別のリストを別のリストを取得することですを使用していますtype = "type2"とimgタグ内のIDの別のリスト。

+0

あなたが意味するものの例を示してください。すべてのノードを一度に見つけるために単一のXPath式を使用するだけではない理由は明確ではありません。 –

+0

"なぜXPath式を1つだけ使うのではないのですか?"すべてのノードを一度に取得した後、各タイプの属性値のノード値を取得するためにIf-elseを配置する必要があります。これは良いアプローチですか?例を追加しました。 –

+0

@user:あなたの時間を取る。実際のXMLのコピーである必要はありません。属性値について何を意味するかを示すものです。たとえば、私はあなたがなぜ必要なのかを知りません。 –

答えて

1

私の大まかな答えは、あなたが非常に大きなドキュメントやドキュメントセットを持っていない限り、パフォーマンスはあまり重要ではないということです。

この場合、おそらくSAXを使いたいと思うでしょう。いずれにしても、文書を1回だけトラバースし、メモリ全体を保持したくない場合があります。だから、ドキュメントをストリーミングし、各a要素で停止し、そのタイプに応じてlist1またはlist2に追加します。

関連する問題