1

3 つの異なるノードのうちの 1 つを C# プログラムに解析したい XML ファイルがあります。これら 3 つの異なる XPath のうち 1 つだけが XML ファイルに対して有効であり、それぞれが可能な限り具体的です。XPath のサンプルを以下に示します。

/ns:root/ns:foo/ns:bar[@barattr='{0}']/ns:foobar{1}/ns:{2} |                     
/ns:root/ns:foo/ns:bar[@barattr='{0}']/ns:{2} |                                
/ns:root/ns:foo/ns:bar[@barattr='{0}' and @{2}]

コードでは String.Format を使用してこれらのクエリを動的に生成しているため、これらにはフォーマッターがあることに注意してください。

私の質問は、最初の XPath がノードを返す場合 (つまり、ns:root/ns:foo/ns:bar[@barattr='{0}']/ns:foobar{1}/ が存在する場合) に SelectSingleNode が行うことです。 ns:{2})? それでも 3 つの XPath をすべて照会して、最初の XPath だけを返すのでしょうか、それともその時点で停止することがわかるでしょうか? それでも3つすべてを照会する場合、一致が見つかったら停止することをC#またはXPathで示す方法はありますか?

助けてくれてありがとう!

4

1 に答える 1

0

単一の XPath 式ではありません。

これを試すことができますが、使用されているオプティマイザーの巧妙さに頼る必要があります。

Exp1 | Exp2[not(Exp1)] | Exp3[not(Exp1) and not(Exp2)]

オプティマイザーがまともなものである場合 (.NET の場合はそうだと思います)、Exp2 は Exp1 がノードを選択しない場合にのみ評価され、Exp3 は Exp1 と Exp2 のどちらも選択されない場合にのみ評価されます。ノードを選択します。

于 2012-11-21T19:50:43.770 に答える