Xpath Query提供逗号分隔的输出

时间:2013-02-20 14:30:13

标签: xpath

<?xml version="1.0" encoding="UTF-8"?> 
<Envelope> 
   <Body> 
      <RetrieveChangeKeysListResponse message="Success"> 
         <keys> 
            <ChangeID type="String">C10286</ChangeID> 
         </keys> 
         <keys> 
            <ChangeID type="String">C10296</ChangeID>
         </keys> 
      </RetrieveChangeKeysListResponse> 
   </Body> 
</Envelope>

从上面的xml文件中,下面的xpath查询的输出给出了没有分隔符的值。

查询:

/Envelope/Body/RetrieveChangeKeysListResponse/keys/ChangeID/text()

输出: C10286C10296

如何在值之间使用分隔符获取输出。

示例:(C10286,C10296

需要你的帮助。

谢谢和问候

Riyas Hussain A

2 个答案:

答案 0 :(得分:2)

看起来您有两个ChangeID节点,如果您将XPATH称为

/Envelope/Body/RetrieveChangeKeysListResponse/keys/ChangeID/text()

然后它将通过连接在一起输出所有值。

请将XPATH称为

/Envelope/Body/RetrieveChangeKeysListResponse/keys/ChangeID

然后根据您的意愿concat() text()

更新:

使用XSLT 1.0,您可以这样做: -

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates select="/Envelope/Body/RetrieveChangeKeysListResponse/keys/ChangeID"/>
    </xsl:template>
    <xsl:template match="ChangeID">
        <xsl:if test="position()='1'">
            <xsl:value-of select="'('"/>
        </xsl:if>
        <xsl:choose>
            <xsl:when test="position()=last()">
                <xsl:value-of select="text()"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(text(),',')"/>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if test="position()=last()">
            <xsl:value-of select="')'"/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出:

(C10286,C10296)

答案 1 :(得分:0)

解决方案:

string-join((/ Envelope / Body / RetrieveChangeKeysListResponse / keys / ChangeID),',')

输出:

String ='C10286,C10296'