1

私はそれが奇妙な質問であることを知っています!

この要件は、XPath クエリの結果が単一のノードであることを期待する既存のコードによるものです。残念ながら、現時点では、制御できない要因によりコードを変更することはできません (回避策がない場合は、おそらくリリースを遅らせる必要があります)。

私の場合、XPath は現在整数値 (カウント) を返します。

count(/someNode/node)

コードはXPathNavigator.SelectSingleNode()method を使用していますが、結果がノードではないため、もちろん失敗します。

代わりに、偽のノードではありますが、ノードを返すために XPath が必要です。出来ますか?.NET が使用されるため、XPath は (2.0 ではなく) 1.0 でなければならないことに注意してください。

PSそして、はい、問題のコードをできるだけ早くリファクタリングすることを検討します!

4

2 に答える 2

2

テキスト コンテンツが の値に等しいノードを返す XPath 式が必要な場合は、次のcount(/someNode/node)ように実行できます。

"(//text() | //*/@*)[. = count(/someNode/node)]"

入力ドキュメントがどのようなものかによっては、これは非常に非効率的かもしれません。入力ドキュメントに正しい数値を含むテキスト ノードがない場合、失敗する可能性があります。ただし、状況によっては、それがうまくいく可能性があり、リリースの遅延を回避するのに役立つ場合があります.

たとえば、入力 XML が小さく、可能な値の範囲count(...)が限られている場合、および XML を変更できる場合は、入力 XML に追加のテキストまたは属性ノードを含めて、必要な数が利用可能です。

于 2012-10-02T18:36:09.950 に答える
2

XPath は入力ドキュメント内のノードを選択します。新しいノードまたは「偽の」ノードを作成することはできないため、式を評価する場合は、メソッドhttp://msdn.microsoft.com/en-us/count(/someNode/node)を使用する必要があると思いますlibrary/2c16b7x8.aspx ではなく.EvaluateSelectSingleNode

于 2012-10-01T16:45:05.370 に答える