1

別のノードの名前を含むノードを見つけるにはどうすればよいですか?

たとえば、<a>存在し<b>、テキスト「a」が含まれている場合は選択したいのですが、指定さ<b>れた名前が存在しない場合は選択しません。

<root>
    <a /> <!-- Do not care what is in this for now -->
    <b>a</b> <!-- Find this node only -->
    <b>c</b> <!-- This node is unwanted -->
</root>

私は効果的に比較name()してtext()値を付けることができることを知っています。以下は、自分自身を参照し、他のノードを除外するノードを見つけます。

*[name() = text()]

text()このクエリではコンテキストが間違っているため、他の参照を検索しようとして失敗します。

b[../*[name() = text()]]

上記<b>は、自分の名前を含む兄弟が少なくとも1つある場合、おそらく存在する場合は、単にすべてを返します<a>a</a>

ノードのテキストを名前のコレクションと比較する必要があります。これは私が探しているものであるはずですが*/name()、構文エラーをスローします:

b[text() = ../*/name()]
4

1 に答える 1

0

XPath 1.0は範囲変数を定義するための式/句を提供しないため、これはXPath1.0では不可能だと思います。また、XPath 1.0では、関数呼び出しをロケーションステップにすることはできません。

XPath2.0ソリューションは簡単です。

b[. = ../*//name()]
于 2012-12-30T22:09:17.987 に答える