以下是我得到的数据:
<AddressIDs>
<AddressID IDType="ABC_1">
<HNumber>YYY_1</HNumber>
</AddressID>
<AddressID IDType="ABC_2">
<HNumber>YYY_2</HNumber>
</AddressID>
<AddressID IDType="ABC_3">
<HNumber>YYY_3</HNumber>
</AddressID>
<AddressID IDType="ABC_4">
<HNumber>YYY_4</HNumber>
</AddressID>
</AddressIDs>
我必须在我的页面上显示如下内容,HNumber:YY_1 | YYY_2 | YYY_3 | YYY_4。
这就是我编写XML和XSLT的方法:
XML:
<AddressID Label="HNumber:" XPath="AddressIDs/AddressID" IDType="ABC_*">
<HNumber XPath="AddressIDs/AddressID/HNumber"></HNumber>
</AddressID>
XSLT:
<label>HNumber:</label>
<label>
<xsl:choose>
<xsl:when test="AddressIDs/AddressID [contains(@IDType,'ABC_')]!=''">
<xsl:value-of select="concat(AddressIDs/AddressID [contains(@IDType,'ABC_')]/HNumber,'|')"/>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</label>
请建议这是否正确。
答案 0 :(得分:0)
concat
函数将字符串连接在一起。如果其中一个参数是xpath表达式,它将使用该表达式返回的第一个节点的值。
如果您使用的是XSLT 1.0,一种解决方案是使用xsl:for-each
来选择所有节点,并以此方式构建字符串。例如
<xsl:for-each select="AddressIDs/AddressID [starts-with(@IDType,'ABC_')]/HNumber">
<xsl:if test="position() > 1">|</xsl:if>
<xsl:value-of select="." />
</xsl:for-each>
但是,如果您使用的是XSLT 2.0,则可以使用separator
上的xsl:value-of
属性,如下所示:
<xsl:value-of select="AddressIDs/AddressID [starts-with(@IDType,'ABC_')]/HNumber" separator="|" />