
No.1ベストアンサー
- 回答日時:
preceding-sibling::*[1][aaa]
<a>
<b xml:id="x0100">
<aaa id="x0101"></aaa>
</b>
<b xml:id="x0200">
<aaa id="x0201"></aaa>
</b>
<c xml:id="x0300"/>
</a>
現在c要素を指しているとすると
要素名関係(*)なくpreceding-siblingを取って来る。その時の順番はreverse orderであるから
preceding-sibling::*[1]/@id は x0200
preceding-sibling::*[2]/@id は x0100
です。
その1番目の要素、つまりx0200の要素(ここまで今回はたまたま1個しかない条件)の中で
「aaa要素を子要素として持つ」という条件を満たすものです。= x0200の要素は条件をみたすのでこれが選ばれる。
preceding-sibling::*[1][self:aaa]
名前空間接頭辞selfに関連付けられた名前空間のaaa要素を子に持つ、という条件をみたすかどうか、という条件に変わっただけです。
ちなみに、
preceding-sibling::*[1][self::aaa]
はx0500の要素から見て、0x400の要素です。
preceding-sibling::*[1]自身の要素名が名前空間なしのaaaですから。
<a>
<b xml:id="x0300" />
<aaa xml:id="x0400" />
<c xml:id="x0500"/>
</a>
preceding-sibling::*[1][name()='aaa')]
は構文エラー
preceding-sibling::*[1][name()='aaa']
は最後の条件が「コンテキストノードのQNameが'aaa'」ということでpreceding-sibling::*[1][self::aaa]と同じ結果になるでしょう。
#厳密には[]でくくられたPredicateはnodeからbooleanへの変換がかかっていると思うけどね。
http://www.w3.org/TR/xpath/#predicates
#QNameって何?とかコンテキストノードって何?って聞かないでね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLファイル内のデータ(値)を変...
-
VB6でXMLを作成しているのです...
-
XPathで途中に名前空間が設定さ...
-
C#でXMLの読み取り書き取りにつ...
-
XMLDocumentでスキーマを無視し...
-
C# もしくはVB
-
C# GetElementsByTagNameで取得...
-
XMLの要素の内容の中に要素
-
XPATHについての質問です。以下...
-
VBAでXML文書のある特定タグ以...
-
東芝のDynabookなのですがアン...
-
ノードの並び替え
-
ツリービューのノードをダブル...
-
大規模行列の計算
-
XSLT
-
CPUの考え方を教えてください ...
-
4バイトを10進数に変換する方法
-
HTTPステータス 404 - There is...
-
特殊記号が勝手にエスケープさ...
-
XML、XSLTの適応エラー(IEから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XPathで途中に名前空間が設定さ...
-
XMLファイル内のデータ(値)を変...
-
VBAでXMLを出力するプログラム...
-
VBAでXML文書のある特定タグ以...
-
VB6でXMLを作成しているのです...
-
エクセルVBA ウェブ上のボタ...
-
C#でXMLファイルの情報にアクセ...
-
XMLをXSLTで変換するとき、XML...
-
XMLの要素の内容の中に要素
-
XML文のid属性とclass属性について
-
C# GetElementsByTagNameで取得...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
XMLで要素が記述された順番に意...
-
Excel-VBAでXMLの複数ノードの...
-
複数のマックPCによる数値計算...
-
XML、XSLTの適応エラー(IEから...
-
バッチファイルでテキストファ...
おすすめ情報