我有一个 XML列表的“设备”。
<devices>
<device>NOKIA-43</device>
<device>HTC-7</device>
<device>SAMSUNG-376</device>
<devices>
使用 XSLT ,我想检索第一个“HTC *”设备(如果有)或第一个设备(如果有)没有HTC设备。
XSLT代码会做什么?
谢谢!
答案 0 :(得分:1)
这是一种可能性(使用Oxygen / XML测试):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="//devices">
<xsl:choose>
<xsl:when test="device[starts-with(text(),'HTC')]">
<xsl:apply-templates select="device[starts-with(text(),'HTC')][position()=1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="device[position()=1]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="device">
<xsl:value-of select="text()"/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
使用此XPath单行:
/*/device[starts-with(., 'HTC')][1]
|
/*/device[1][not(/*/device[starts-with(., 'HTC')])]
通常,在某些$n1
为$condition
时选择节点true()
,并在此条件为{时选择节点$n2
{1}} 强>
false()
<强>解释强>:
上面的表达式是两个子表达式的并集( $n1[$condition] | $n2[not($condition)]
),其中只有一个选择一个节点,具体取决于特定|
的值。
终于,在XSLT中,我将使用这样的XPath表达式:
$condition