2017-08-25 13 views
-2

はこの愚かな質問をするための私を許してください、私はかなり
/@*[name()=\'today\' or name()=\'tomorrow\']は、以下のXPathこのxpath <* [local-name()= 'date ']/@ * [name()= 'today 'またはname()= 'tomorrow ']>は、

<*[local-name()=\'date\']/@*[name()=\'today\' or name()=\'tomorrow\']>

私はname()=前にアスタリスクについて混乱している中で何を意味するのか理解していません。私はローカル名の前にアスタリスクがプレフィックス/名前空間を指定することを知っていますが、アスタリスクはアトリビュートの前で何をしていますか?

ありがとうございます!

+1

'/ @ *'は*任意の属性*を意味します。述語 '[name()= \ 'today \'またはname()= \ 'tomorrow \']'は実際には*ではなく、 '@ today'または' @ tomorrow'の属性のみを表示します。 – Andersson

+0

@Andersson私が正しく理解すれば、xpathはローカル名 'date'の属性' today'と 'tomorrow'を意味します。私が間違っているなら、私を修正してください。次に、このxpathは 'today'と' tomorrow'を取っているだけなので、 '@ [name()= 'today]やname()=' tomorrow 'のように書くのはなぜですか?なぜアスタリスク? – Penny

+0

XPathは、一致した 'date'ノードから' @ today'または/および 'tomorrow'属性の値を返します。 */* [local-name()= \ ']を試してみると、アスタリスクを使用したくない場合は、*なぜ* - ノード名(またはアスタリスク)日付\ '] /(@今日| @tomorrow) ' – Andersson

答えて

2

表現@*[name()=\'today\' or name()=\'tomorrow\']は、名前()のいずれかの「今日」や「明日ですべての属性を選択します。属性のname()は接頭辞のない属性の場合はNAME、接頭辞付きの属性の場合はPREFIX:NAMEです。したがって、この式は、 'today'または 'tomorrow'という名前空間属性がないかどうかをテストします。XPath 2.0では、(@today|@tomorrow)と書く方が良いでしょう。

name()="X"local-name()="X"の違いは、最初の大文字小文字は名前空間のない属性にのみ一致し、2番目の大文字小文字はたとえばP:Xという名前の属性に一致します。

+0

もう一度@michaelKayありがとう!今私には明らかです。助けを感謝します! – Penny

関連する問題