4
<?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

これであなたの助けが必要です。

ありがとう、よろしく

リヤスフセインA

4

2 に答える 2

3

ChangeID2 つのノードがあるよう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)

于 2013-02-20T14:32:54.397 に答える
0

解決:

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

出力:

文字列='C10286,C10296'

于 2019-09-04T10:12:38.610 に答える