2011-02-15 14 views
0
<block2 type="input"> 
    <messageType>103</messageType> 
    <receiverAddress>BKTRUS33XBRD</receiverAddress> 
    <messagePriority>N</messagePriority> 
    <deliveryMonitoring>3</deliveryMonitoring> 
</block2> 

メッセージタイプが103の場合と同じ出力が必要です。次に、CTDのような文字列を渡します。xsltを使用してXMLからタグ値を取得する方法

出力:CTD,I103N

+0

'{}'ボタンを使用して、あなたのコードをフォーマットを開始してください。 – Flack

+0

私はあなたに仲間をつかまえます... – praveen

+0

@Flack:これはhttp://stackoverflow.com/questions/5001480/how-to-get-tag-values-from-xml-とはどのように違うのですか? using-xslt –

答えて

1
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> 
    <xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="block2[messageType = '103']"> 
      <xsl:value-of select=" 
       concat(
        'CTD,', 
        translate(substring(@type, 1, 1), $vLower, $vUpper), 
        messageType, 
        messagePriority 
       )"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

出力がCTD,I103Nになります。

XSLT 2.0ではfn:upper-casefn:lower-caseを使用できます。

+0

bro私は入力があるかどうかをチェックする必要があります。Iを置き換えるか、出力手段を置き換えてタイプをチェックする必要があります。 praveen

+0

flack broはこの問題を助けます – praveen

+0

@プラベーン。編集されました。 – Flack

0

ザため、各ループは必要ではない、すなわち

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text"/> 

    <xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> 
    <xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/> 

    <xsl:template match="//block2[messageType = '103']"> 
     <xsl:value-of select="concat('CTD,', 
      translate(substring(@type, 1, 1), $vLower, $vUpper), 
      messageType, messagePriority)"/> 
    </xsl:template> 

</xsl:stylesheet> 
+1

パターン内の開始//演算子... –

関連する問題