Bir 'arama' düğümünden bilgi okuyabilen ve bunu kullanarak bir arama gerçekleştirebilen bir Xpath Bildirimi (1.0) yazmaya çalışıyorum.Arama parametresi boş veya eksik/yanlışsa, hiçbir şey döndürmek için Xpath işlevini ''() 'nasıl kullanabilirim?
Çok güzel bir ilerleme kaydediyordum, ancak bir özniteliğin (aramada bir değer için kullanılmış) boş veya mevcut olmaması durumunda sorun yaşadı.
Kod Düzenlendi basitleştirmek için Örnek: Yani burada
benim örnek XML geçerli:
<xml>
<files>
<file name="foo" description="" rating="4"/>
<file name="food" description="" rating="4"/>
<file name="foobar" description="" rating="3"/>
<file name="bar" description="" rating="3"/>
<file name="barter" description="" rating="3"/>
<file name="barterer" description="" rating="2"/>
</files>
<searches>
<search id="1">
<exclude>
<file term="foo"/>
</exclude>
</search>
</searches>
</xml>
Ve çalışma XPATH:
//files/file[
not(contains(@name, //search[@id='1']/exclude/file/@term))
]
Bu beklenen işleri olarak ...
Ancak beklenen özellik ise Eksik ya da boş çalışmaz. Çünkü bence: (@attrib, ""), bir sebepten ötürü her şeyle eşleşir, bu nedenle, öznitelik "" veya mevcut değilse, bir() ile hiçbir zaman uyuşmaz. Bunun için XML hariç parçasını değiştirmek eğer
Örnek için, başarısız: Çok bununla
<exclude>
<file term=""/>
</exclude>
:
<exclude></exclude>
boş değeri için değil, kontrol için bir yol var mı Seçimi yap veya Mantığı yapılandırmanın belki daha iyi bir yolu var. Unutmayın ki Koşullu veya Xpath2.0'daki diğer işlevleri kullanamıyorum.
Eğer, soruyu düzenlemek ve bir arama maçı bulmak için kuralları tarif edebilir misiniz - bunlar değil sağlanır ve uzun XPath ifadesini ziyade kafa karıştırıcı - Daha kısa bir ifadenin kullanılabileceğinden şüpheleniyorum. Örneğin: 'cond1 ve cond2 ya da cond1 ya da cond2', basit, eşdeğer ifade' cond1 ya da cond2' ile değiştirilebilir. –
Bunun için üzgünüz. Kod örneklerini, sorunuma daha açık bir şekilde işaret etmek için güncelledim. – Futile32
@ Futile32, belki de XPath'ınız düğümleri = "" ismine sahip olsun, ve hiç boş olmadığınız için hiç almıyorsunuz. –