web-dev-qa-db-ja.com

ノード名のXPathワイルドカード

XMLファイルからノードを取得したいのですが、ノードには「latest_」などのプレフィックスが付いていますが、これは変更される可能性があり、XSLTが可能な限り流動的であることを切望しています。使用したいXPathは次のとおりです。

/data/stats/*_cost

これはlatest_costnewest_costanything_costと一致する必要があります。これを行う方法はありますか?

乾杯:-)

42
Ben Everard

これは、名前空間の「_cost」に等しい名前の最後の5文字を​​持つ要素を選択する正しいXPath 1.0式です。

/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
65
user357812

containsを使用することもできます

例えば

/data/stats[contains(.,'_cost')] 
7
redsquare

XPath 1.0では、/data/stats/*[substring-after(name(), '_cost') = '']パターンを使用できます。要素の名前が__cost_サフィックスで終わるかどうかを確認します。

XPath 2.0にはfn:ends-with(str, str)があり、対応する式は*[ends-with(name(), '_cost')]になります。

6

上記は私にはうまくいきませんでした。次のように「少し」修正する必要がありました。

/data/stats/*[contains(name(),'_cost')]
4
David W.