การใช้เคียวรี xpath คุณจะค้นหาว่ามีโหนด (แท็ก) อยู่หรือไม่
ตัวอย่างเช่นหากฉันต้องการตรวจสอบให้แน่ใจว่าหน้าเว็บไซต์มีโครงสร้างพื้นฐานที่ถูกต้องเช่น / html / body และ / html / head / title
การใช้เคียวรี xpath คุณจะค้นหาว่ามีโหนด (แท็ก) อยู่หรือไม่
ตัวอย่างเช่นหากฉันต้องการตรวจสอบให้แน่ใจว่าหน้าเว็บไซต์มีโครงสร้างพื้นฐานที่ถูกต้องเช่น / html / body และ / html / head / title
คำตอบ:
<xsl:if test="xpath-expression">...</xsl:if>
ตัวอย่างเช่น
<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())
(เช่นเพียงทดสอบว่ามีอยู่และไม่มีโหนดย่อยหรือโหนดข้อความใด ๆ )
ลองใช้นิพจน์ต่อไปนี้: boolean(path-to-node)
Patrick ถูกต้องทั้งในการใช้งานxsl:if
และในไวยากรณ์สำหรับตรวจสอบการมีอยู่ของโหนด อย่างไรก็ตามในขณะที่การตอบสนองแพทริคหมายถึงไม่มีเทียบเท่า XSL ถ้า-แล้วอื่น ๆ ดังนั้นหากคุณกำลังมองหาบางสิ่งบางอย่างมากขึ้นเช่นถ้า-แล้วอื่นคุณปกติดีกว่าการใช้และxsl:choose
xsl:otherwise
ดังนั้นไวยากรณ์ตัวอย่างของ Patrick จะใช้งานได้ แต่นี่เป็นทางเลือก:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
if-then-else
ยังสิ่งที่เกี่ยวกับif-else if-else
? ในคำตอบของ davenpcj ฉันสามารถวางtest="somexpath"
ในวันที่ 2 เมื่อทำมันได้if-else if-else
หรือไม่
อาจดีกว่าที่จะใช้ตัวเลือกไม่ต้องพิมพ์ (หรืออาจพิมพ์ผิด) การแสดงออกของคุณมากกว่าหนึ่งครั้งและช่วยให้คุณสามารถติดตามพฤติกรรมที่แตกต่างกันเพิ่มเติม
ฉันใช้บ่อยมากcount(/html/body) = 0
เนื่องจากจำนวนโหนดที่เฉพาะเจาะจงน่าสนใจกว่าชุด ตัวอย่างเช่น ... เมื่อมีมากกว่า 1 โหนดที่ตรงกับการแสดงออกของคุณโดยไม่คาดคิด
<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
อัจฉริยะ! : DI ใช้/html[count(/body)=0]/someNode
สำหรับการเลือกsomeNode
เมื่อ/body
(หรืออะไรก็ตาม) ที่ขาดหายไป
/html[count(/body)=0]
จะไม่เลือกอะไรเลยไม่สามารถมีโหนดรูทสองโหนดใน XML บางทีคุณอาจจะมีความหมาย/html[count(body)=0]
ซึ่งจะเป็นเช่นเดียวกับหรือ/html[not(body)]
/html[not(exists(body))]
ฉันทำงานในทับทิมและใช้ Nokogiri ฉันดึงข้อมูลองค์ประกอบและดูว่าผลลัพธ์เป็นศูนย์หรือไม่
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?
รูปแบบเมื่อใช้ xpath ใน Java โดยใช้ count ():
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}