Bir xpath sorgusu kullanarak bir düğümün (etiketin) var olup olmadığını nasıl bulabilirsiniz?
Örneğin, bir web sitesi sayfasının / html / body ve / html / head / title gibi doğru temel yapıya sahip olduğundan emin olmam gerekirse
Bir xpath sorgusu kullanarak bir düğümün (etiketin) var olup olmadığını nasıl bulabilirsiniz?
Örneğin, bir web sitesi sayfasının / html / body ve / html / head / title gibi doğru temel yapıya sahip olduğundan emin olmam gerekirse
Yanıtlar:
<xsl:if test="xpath-expression">...</xsl:if>
Yani mesela
<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())
(yani, sadece var olup olmadığını test edin ve herhangi bir alt düğüm veya metin düğümü içermiyor).
Aşağıdaki ifadeyi deneyin: boolean(path-to-node)
Patrick, xsl:if
bir düğümün varlığını kontrol etmek için hem sözdiziminde hem de sözdiziminde doğrudur . Bununla birlikte, Patrick'in yanıtı, if-then-else ile eşdeğer bir xsl eşdeğeri yoktur, bu nedenle eğer if-then-else gibi daha fazla bir şey arıyorsanız, normalde xsl:choose
ve öğelerini kullanmanız daha iyi olur xsl:otherwise
. Yani, Patrick'in örnek sözdizimi işe yarayacak, ancak bu bir 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
, ayrıca ne olacak if-else if-else
? Davenpcj'in cevabında, test="somexpath"
ne zaman yapılacağını 2'ye yerleştirebilir miyim if-else if-else
?
Bir seçeneği kullanmak daha iyi olabilir, ifadelerinizi bir kereden fazla yazmanız (veya muhtemelen yanlış yazmanız) gerekmez ve ek farklı davranışları izlemenizi sağlar.
Çok count(/html/body) = 0
sayıda kullanıyorum , çünkü belirli düğüm sayısı setten daha ilginç. Örneğin ... beklenmedik bir şekilde ifadenizle eşleşen 1'den fazla düğüm olduğunda.
<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
deha! : DI ne zaman (ya da ne olursa olsun) eksik olanı /html[count(/body)=0]/someNode
seçmek için kullanınsomeNode
/body
/html[count(/body)=0]
hiçbir şey seçmez, XML'de iki kök düğüm olamaz. Belki demek istedin /html[count(body)=0]
, hangisi ile aynı olurdu /html[not(body)]
, ya da /html[not(exists(body))]
.
Ruby'de çalışıyorum ve Nokogiri kullanarak elemanı alıyorum ve sonucun sıfır olup olmadığını görmek için bakıyorum.
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?
Count () kullanarak Java'da xpath kullanılırken kullanılan bir varyasyon:
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}