0

XSLTを使用してXMLの一部を入力XMLに追加しようとしています。しかし、出力は期待どおりに来ていません。ヘルプを削除します。

私の入力XML:

    <input  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd">
        <nodeA id="test">
            <inodeAA> Sample </inodeAA>
            <inodeAB> Samples </inodeAB>
        </nodeA>
        <nodeB id="test">
            <inodeBA> Sample </inodeBA>
            <inodeBB> Samples </inodeBB>
        </nodeB>
    </input>

以下は、XSLTにパラメーターとして渡した別のXML部分です。この部分は、入力XMLに追加されます。

    <ns3:output xmlns:ns3="http://mysample.org">
        <ns3:reply id="rep">
            <ns3:zip>55555</ns3:zip>
            <ns3:place>SampleLoc</ns3:place>
        </ns3:reply>
    </ns3:output>

以下は私の期待される出力です:

    <input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd">
        <nodeA id="test">
            <inodeAA> Sample </inodeAA>
            <inodeAB> Samples </inodeAB>
        </nodeA>
        <nodeB id="test">
            <inodeBA> Sample </inodeBA>
            <inodeBB> Samples </inodeBB>
        </nodeB>

        <ns3:output xmlns:ns3="http://mysample.org">
            <ns3:reply id="rep">
                <ns3:zip>55555</ns3:zip>
                <ns3:place>SampleLoc</ns3:place>
            </ns3:reply>
        </ns3:output>

    </input>

以下は、このタスクに使用しているXSLです。

以下のXSLTでは、パラメーター「outParam」は、入力に追加しようとしているxml部分を保持しています。

    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:ns3="http://mysample.org"
        exclude-result-prefixes="soap xsl">
        <xsl:output omit-xml-declaration="yes" indent="yes" />

        <xsl:param name="outParam"></xsl:param>

        <xsl:template match="input">
            <input>
                <xsl:copy-of copy-namespaces="no" select="./@*" />
                <xsl:copy-of copy-namespaces="no" select="node() | @*" />
            </input>
            <xsl:copy >
                <xsl:value-of select="$outParam" disable-output-escaping="yes" ></xsl:value-of>
            </xsl:copy>
        </xsl:template> 
    </xsl:stylesheet>

以下は私が得ている出力です。これは私の期待する出力と一致していません。

    <input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ns3="http://mysample.org"  
        xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd" >
        <nodeA id="test">
            <inodeAA> Sample </inodeAA>
            <inodeAB> Samples </inodeAB>
        </nodeA>
        <nodeB id="test">
            <inodeBA> Sample </inodeBA>
            <inodeBB> Samples </inodeBB>
        </nodeB>
    </input>
    <input xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   
        <ns3:output xmlns:ns3="http://mysample.org">
            <ns3:reply id="rep">
                <ns3:zip>55555</ns3:zip>
                <ns3:place>SampleLoc</ns3:place>
            </ns3:reply>
        </ns3:output>
    </input>

助けてください。私は多くの組み合わせを試しましたが、運がありません。:(

注:この変換は、提供されたXSLTに基づいてペイロードXMLを変換するMuleXSLTTransformerを使用して実行しています。

4

2 に答える 2

2

パラメータがノードまたはノードのシーケンスである場合、必要なのは

<xsl:template match="input">
  <xsl:copy>
     <xsl:copy-of select="@* , node(), $outParam"/>
  </xsl:copy>
</xsl:template>

渡されたパラメータがXMLマークアップを含む文字列である場合は、次が必要です。

<xsl:template match="input">
  <xsl:copy>
    <xsl:copy-of select="@*, node()"/>
    <xsl:value-of select="$outParam" disable-output-escaping="yes"/>
  </xsl:copy>
</xsl:template>
于 2012-12-13T16:13:29.560 に答える
1

EXSLTがオプションの場合は、追加xmlns:exsl="http://exslt.org/common"して試してください

    <xsl:template match="input">
        <input>
            <xsl:copy-of copy-namespaces="no" select="./@*" />
            <xsl:copy-of copy-namespaces="no" select="node() | @*" />
            <xsl:copy-of select="exsl:node-set($outParam)/*" />
        </input>
    </xsl:template> 
于 2012-12-13T16:11:37.450 に答える