Menggunakan kueri xpath bagaimana Anda menemukan jika ada simpul (tag) sama sekali?
Sebagai contoh jika saya perlu memastikan halaman situs web memiliki struktur dasar yang benar seperti / html / tubuh dan / html / kepala / judul
Menggunakan kueri xpath bagaimana Anda menemukan jika ada simpul (tag) sama sekali?
Sebagai contoh jika saya perlu memastikan halaman situs web memiliki struktur dasar yang benar seperti / html / tubuh dan / html / kepala / judul
Jawaban:
<xsl:if test="xpath-expression">...</xsl:if>
jadi misalnya
<xsl:if test="/html/body">body node exists</xsl:if>
<xsl:if test="not(/html/body)">body node missing</xsl:if>
html/body and not(html/body/node())
(yaitu, coba saja jika ada dan tidak mengandung simpul anak, atau simpul teks).
Coba ungkapan berikut: boolean(path-to-node)
Patrick benar, baik dalam penggunaan xsl:if
, dan dalam sintaksis untuk memeriksa keberadaan suatu simpul. Namun, seperti yang Patrick nyatakan, tidak ada xsl yang setara dengan if-then-else, jadi jika Anda mencari sesuatu yang lebih seperti if-then-else, Anda biasanya lebih baik menggunakan xsl:choose
dan xsl:otherwise
. Jadi, contoh sintaks Patrick akan berfungsi, tetapi ini merupakan alternatif:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
if-then-else
, juga bagaimana if-else if-else
? Dalam jawaban davenpcj, bisakah saya menempatkan test="somexpath"
ke-2 kapan membuatnya if-else if-else
?
Mungkin lebih baik menggunakan pilihan, tidak perlu mengetik (atau mungkin salah ketik) ekspresi Anda lebih dari sekali, dan memungkinkan Anda untuk mengikuti perilaku lain yang berbeda.
Saya sangat sering menggunakan count(/html/body) = 0
, karena jumlah node tertentu lebih menarik daripada yang ditetapkan. Misalnya ... ketika ada lebih dari 1 simpul yang cocok dengan ekspresi Anda.
<xsl:choose>
<xsl:when test="/html/body">
<!-- Found the node(s) -->
</xsl:when>
<!-- more xsl:when here, if needed -->
<xsl:otherwise>
<!-- No node exists -->
</xsl:otherwise>
</xsl:choose>
count(/html/body) = 0
jenius! : AKU menggunakannya /html[count(/body)=0]/someNode
untuk memilih someNode
kapan /body
(atau apa pun) hilang
/html[count(/body)=0]
tidak akan pernah memilih apa pun, tidak boleh ada dua simpul root dalam XML. Mungkin maksud Anda /html[count(body)=0]
, yang akan sama dengan /html[not(body)]
, atau /html[not(exists(body))]
.
Saya bekerja di Ruby dan menggunakan Nokogiri saya mengambil elemen dan melihat apakah hasilnya nihil.
require 'nokogiri'
url = "http://somthing.com/resource"
resp = Nokogiri::XML(open(url))
first_name = resp.xpath("/movies/actors/actor[1]/first-name")
puts "first-name not found" if first_name.nil?
Variasi saat menggunakan xpath di Java menggunakan count ():
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}