ฉันจะตรวจสอบว่าค่าเป็นโมฆะหรือว่างเปล่าด้วย XSL ได้อย่างไร
ตัวอย่างเช่นถ้าcategoryName
ว่างเปล่า
นี่อาจเป็นนิพจน์ XPath ที่ง่ายที่สุด (คำตอบที่ยอมรับได้นั้นให้การทดสอบแบบตรงกันข้าม
not(string(categoryName))
คำอธิบาย :
อาร์กิวเมนต์ของnot()
ฟังก์ชั่นด้านบนเป็นสิ่งที่ถูกfalse()
ต้องเมื่อไม่มีรายการย่อยcategoryName
("null") ของรายการบริบทหรือรายการย่อย (เช่นนั้น) categoryName
มีค่าสตริง - สตริงว่าง
ฉันใช้เมื่อเลือกสร้าง
ตัวอย่างเช่น:
<xsl:choose>
<xsl:when test="categoryName !=null">
<xsl:value-of select="categoryName " />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="other" />
</xsl:otherwise>
</xsl:choose>
ใน XSLT 2.0 ให้ใช้ :
<xsl:copy-of select="concat(categoryName, $vOther[not(string(current()/categoryName))])"/>
นี่คือตัวอย่างที่สมบูรณ์ :
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select="concat(categoryName,$vOther[not(string(current()/categoryName))])"/>
</xsl:template>
</xsl:stylesheet>
เมื่อการแปลงนี้ถูกนำไปใช้กับเอกสาร XML ต่อไปนี้:
<categoryName>X</categoryName>
ผลลัพธ์ที่ต้องการถูกต้องถูกสร้างขึ้น :
X
เมื่อนำไปใช้กับเอกสาร XML นี้ :
<categoryName></categoryName>
หรือนี้:
<categoryName/>
หรือบนนี้
<somethingElse>Y</somethingElse>
ผลลัพธ์ที่ถูกต้องถูกสร้างขึ้น :
Other
ในทำนองเดียวกันใช้การแปลงXSLT 1.0นี้:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select=
"concat(categoryName, substring($vOther, 1 div not(string(categoryName))))"/>
</xsl:template>
</xsl:stylesheet>
หมายเหตุ : ไม่มีการใช้เงื่อนไขใด ๆ เลย เรียนรู้เพิ่มเติมเกี่ยวกับความสำคัญของการหลีกเลี่ยงการสร้างแบบมีเงื่อนไขในหลักสูตร Pluralsight ที่ดีนี้:
" รูปแบบการออกแบบเกี่ยวกับยุทธวิธีใน. NET: การควบคุมการไหล "