2010-11-17 17 views
35

XML dosyamdan bir düğüm almak istiyorum, düğümün "latest_" gibi bir öneki var, ancak bu değişebilir ve XSLT'm mümkün olduğu kadar akışkan olmasını istiyorum. İşte kullanmak XPath ister ki:Düğüm adında XPath joker karakterler

/data/stats/*_cost 

Bu latest_cost, newest_cost, anything_cost, bunu yapmanın bir yolu var aynı olmalıdır?

+0

Ortamınızda XPath 2.0 bulunup bulunmadığına bağlı olarak değişir. XPath 1.0 buna izin vermez ve 2.0 yapar. – Younes

+0

'* _cost' gibi ifadelere gelince, XPath 1.0 ve XPath 2.0 bunlara izin vermez. –

cevap

58

kullanabilirsiniz.

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

Fuar noktası, bunu uygulamaya girdim ve diğer dezavantajlar olmadan ihtiyacım olanı yapıyor, reqsquare'e yaptığım yorumu görüyorum. Teşekkürler. –

+0

@ILMV: Çok iyisiniz. Size yardımcı olduğuna sevindim. –

+0

+1 ve @ kullanıcı357812'ye teşekkürler - bu benim benzer kullanım durumum için çok yararlı oldu (eşleşen özellik sonekleri). Bu nasıl yapılır? [Here] (http://blog.jondh.me.uk/2011/10/simplexml-xpath-selector-attribute-not-having-suffix/) – halfer

5

:-)

Alkış XPath 1.0 ile /data/stats/*[substring-after(name(), '_cost') = ''] deseni kullanabilirsiniz. Bu, elemanın isminin _cost son ekiyle bitip bitmediğini kontrol eder. XPath 2.0'da fn:ends-with(str, str) var ve karşılık gelen expersiyonunuz *[ends-with(name(), '_cost')] olacaktır.

+0

Cevabınız için teşekkürler, dizenin mevcut olup olmadığını kontrol ettiğim için benim için iyi çalıştı. Ayrıca ortamım XPath 2'ye sahip gibi görünmüyor. Neyse her neyse :-) –

+2

@ILMV işaret ettiği gibi, bu isimde "_cost" olmadan bir eleman seçecektir. Cevabımı kontrol et. –

+0

@Alejandro, hatama işaret ettiğin için teşekkürler. –

5

Ayrıca bu doğru XPath 1.0 ifade wich herhangi bir isim eşit isme "_cost" son 5 karakteri ile bir öğe seçmek olduğunu contains

örneğin

/data/stats[contains(.,'_cost')] 
+0

'. 'Içermeyen herhangi bir ad() için de geçerlidir. İfade, metin içeriğinin '_const' alt dizgisini içerdiği tüm 'istatistikler' düğümleriyle eşleşecektir. Göç ve düğüm isimleri hakkında bir garanti yoktur. –

+1

'/ data/stats/* [içerir (yerel-isim(), '_ maliyet')]' çalışırdı ... – annakata

+0

Sonunda bu ile gittim '[içerir (yerel-isim(), '_ maliyet')] 'u, utanç verici bir pozisyona karşı ayrımcılık yapmaz, ama gerçekten önemi olmayan kullanımı bağlamında. –