0

というわけで展開へ…

私はいくつかのXMLを持っています

<root>
    <list>
        <item value="9"/>
        <item value="3"/>
        <item value="1"/>
        <item value="8"/>
        <item value="4"/>
    </list>
</root>

XPath "/root/list/item [4]" があり、5 番目の 'item' 要素 (value 属性は 4) を取得すると思われます。

これは、XPath "/root/list/item [5]" が (まだ存在しない) 6 番目の項目を参照することを示唆しています。

私が望むのは、現在存在するアイテムの数に関係なく、「次の」(まだ存在しない)「アイテム」要素を参照する XPath 式です...

これは、ハードコードされた数値ではなく、(現在の要素の数をカウントする) 式を渡すと想定しています。

私はそれを行う方法を知っていますが、それを行う方法を単に見つけることができません.イライラします.

更新:明確にするために...「最後のアイテムノードの後のアイテムノード」を返したいと思います。属性は、既存のノードを区別するためだけにありました)。これにより空のノードセットが返されることに感謝します。

更新:まあ、私は自分の答えを持っているので、なぜこれが欲しかったのかを説明するのは公平だと思います:)

基本的に、xPath は一部の .Net コードで読み取りアドレスではなく書き込みアドレスとして使用されます。

存在しない場所の xPath を EnsureNodeExists ルーチンに渡します。(注: この EnableNodeExists ルーチンを変更することはできません) コードは xPath の各要素を反復し、存在しない場合は作成し、次の反復の親として設定します。

したがって、このコードを "/root/list/item[position() = last()]/following-sibling::item[1]" で 3 回呼び出すと、3 つの項目ノードが作成されます。

4

4 に答える 4

5

まず、XPath:

/root/list/item[4]

4 番目の項目を取得します ([4]述語は の短縮形であるため[position() = 4])。

@value4 でアイテムをフェッチするには、次を使用します。

/root/list/item[@value = '4']

4の項目の後に項目を取得する場合は、次@valueを使用します。

/root/list/item[@value = '4']/following-sibling::item[1]

/root/list/itemこれは、「 withから移動@value = '4'し、次の 'item' という名前の兄弟を見て、最初の兄弟を取得する」と英語に翻訳されます。

これは、次の項目がなくても機能します。この場合、選択したノード セットは空になります。

編集: 値 4 のアイテムが複数ある場合、上記の式が生成する結果は予期しないものになる可能性があることに注意してください。値 4 のアイテムに続くすべてのアイテムが取得されます。これにより、最大で 1 つのアイテムが返されます。

/root/list/item[@value = '4'][1]/following-sibling::item[1]

リストの最後のノードを参照するには、次を使用します。

/root/list/item[position() = last()]

XPath 軸を説明する優れたビジュアルは、 http : //nwalsh.com/docs/tutorials/xsl/xsl/graphics/axes.gif (より大きなチュートリアルの一部) にあります。

于 2009-03-27T11:00:21.330 に答える
3

式で空のノードセットを返すだけの場合、一般的には のようなものだと思いますが/parent::node()、ルートには親がないため空になります。

のようなことができると思いますが/root/list/item[position() = (last() + 1)]、ノードを返さないものと同じ結果が得られます。そのため、実際に何を達成しようとしているのかよくわかりません。

于 2009-03-27T11:28:21.530 に答える
1

次の兄弟式を試してください

この種のヘルプはここにあります

于 2009-03-27T11:02:47.113 に答える
0

セット内の最後のノードの直後に新しいノードを追加しようとしている場合、MSXML では、親要素 (リスト) で appendChild を使用できます。親ノードの最後の子として追加されます。

于 2010-12-04T14:39:49.287 に答える