xpath値の配列とxmlフィードがあります。
フィードが届いたら、xpathの配列にないノードを削除して各xmlファイルをフィルタリングしたいと思います。
私はこれを行うための非常に汚い方法を考えることができます:
1)xml内のノードごとに、そのxpathを形成します
2)配列内にあるかどうかを確認します。
3)そうでない場合は、削除します。
よりクリーンな方法はありますか?
xpath値の配列とxmlフィードがあります。
フィードが届いたら、xpathの配列にないノードを削除して各xmlファイルをフィルタリングしたいと思います。
私はこれを行うための非常に汚い方法を考えることができます:
1)xml内のノードごとに、そのxpathを形成します
2)配列内にあるかどうかを確認します。
3)そうでない場合は、削除します。
よりクリーンな方法はありますか?
アプローチは逆方向です(特定のノードは複数の有効なXPath式で選択できるため、エラーが発生しやすくなります)。あなたがすべき:
フィードが届いたら、xpathの配列にないノードを削除して各xmlファイルをフィルタリングしたいと思います。
ステップ1。指定されたXPath式で選択されていないすべてのノードを選択します
「ノード」とは要素を意味すると思います。もしそうなら、このXPath式:
//*[count(. | yourExpr1 | yourExpr2 ... | yourExprN)
>
count(yourExpr1 | yourExpr2 ... | yourExprN)
]
NXPath式のいずれによっても選択されていないXMLドキュメント内のすべての要素を選択します。、、 yourExpr1
... yourExpr2
、yourExprN
「ノード」とは、要素、テキストノード、処理命令ノード(PI)、コメントノード、および属性ノードを意味する場合、このXPath式を使用して、NXPath式で選択されていないすべてのノードを選択します。
(//node() | //*/@*)
[count(. | yourExpr1 | yourExpr2 ... | yourExprN)
>
count(yourExpr1 | yourExpr2 ... | yourExprN)
]
ステップ2。手順1で選択したノードをすべて削除します。
上記のステップ1で選択したノードごとに、次を使用します。
node.ParentNode.RemoveChild(node);
説明:
XPath union演算子|
は、2つのノードセットの和集合を生成します。したがって、この式yourExpr1 | yourExpr2 ... | yourExprN
をXMLドキュメントに適用すると、指定されたN個のXPath式のいずれかによって選択されるすべてのノードのセットが生成されます。
ノードは、次の場合に正確に$n
ノードのセットに属しません。$ns
count($n | $ns) > count($ns)