0

私は次のXMLコードを持っています:

<root>
   <a><l_desc/></a>
   <b><l_desc>foo</l_desc></b>
   <c><l_desc>bar</l_desc></c>
</root>

l_descノードを親としてaまたはbノード一致せたい。
今のところ、私はこのxpath式を使用します://a/l_desc/.. | //b/l_desc/..

私はこのようなものを書くことを好みます://(a|b)/l_desc/.. 残念ながら、この式は無効です。

最初の式を減らすためのアイデアはありますか?xpathは、XSLTスタイルシートv1.0で使用されます。

ステファン

4

4 に答える 4

3

l_desca または b ノードを親としてノードを一致させたい

よりシンプル:

/root/a/l_desc | /root/b/l_desc

または

/root/*[self::a | self::b]/l_desc

開始//演算子 (設計が悪い、スキーマが不明):

//a/l_desc | //b/l_desc

または

//*[self::a | self::b]/l_desc

XPath 2.0 では、これは有効です

/root/(a|b)/l_desc
于 2011-01-14T12:50:07.727 に答える
1

使用する:

/*/*[self::a or self::b]/l_desc

これは次のことを意味します:l_descいずれaかの子であるすべての要素、またはbそれ自体が XML ドキュメントの最上位要素の子である要素を選択します。

避ける:

  1. //ドキュメントの構造がわかっている場合は、略語を使用します。//非常に非効率になる可能性があります。

  2. parent::必要がない場合は、逆軸( など) を使用します。逆方向の軸を含む式は理解しにくく、順方向の軸のみを含む式よりも効率が悪い場合があります。

于 2011-01-14T15:36:54.553 に答える
1

ここで述語を使用できます

l_desc[../a|../b]
于 2011-01-14T12:49:19.053 に答える
1

どうですか

//l_desc[parent::a or parent::b]

?

于 2011-01-14T12:52:02.000 に答える