添加两个XML.使用XSLT变压器



我正在寻找一种让我很困扰的方案。

我正在使用m子3.3。

我有一些传入的XML和第二个来自浓度的XMLComcom。

现在,要将来自浓度的XML添加到我的输入XML中。

我的流程如下(摘要)

<flow name="main" >
    <file:inbound  ....> 
    <enricher target="#[variable:myProperty]">
        <vm:outbound .... />
    </enricher>
    <xslt transformer .... />
    .......
    .......
    <file:outbound ..>
</flow>

我的m子流部分和XSL如下

给出
    <mulexml:xslt-transformer   maxIdleTransformers="2" maxActiveTransformers="5"   xsl-file="C:NSBTransformerXSL.xsl" outputEncoding="UTF-8" doc:name="XSLT">

        <mulexml:context-property key="RefXML"  value="#[header:INVOCATION:RefXML]" />
    </mulexml:xslt-transformer>

我的XSL在下面给出

<xsl:param name="RefXML"></xsl:param>
<xsl:template match="@*|node()">        
    <xsl:copy   >             
        <xsl:apply-templates select="@*|node()"/>                  
    </xsl:copy>    
</xsl:template>
<xsl:template match="TXRequest">
    <xsl:copy copy-namespaces="no" >
        <xsl:apply-templates select="@* | node()"/>         
        <xsl:copy-of select="$RefXML"/>                         
    </xsl:copy>
</xsl:template>

谢谢..

使用xsl-t变压器,然后将您从浓度从浓度获得的XML片段传递到XSL作为命名参数。

这样,您可以轻松地组合两个XML。

正确这样做的方法是将RefXML作为DOM元素解析,然后以XSL参数传递,但是mule中的一个错误阻止了以下方法:(

因此,唯一的选项是RefXML的字符串值的逐字副本:

<xsl:value-of select="$RefXML" disable-output-escaping="yes" />

不是超级满足,但可以工作。

尚不清楚您的问题或问题是什么。我相信这是您很难将两个XML件结合在一起。

如果是这种情况,我建议使用DatamApper -http://www.mulesoft.org/documentation/display/mule3studio/datamapper transformer rereference

尝试在您的问题上具体特定,也喜欢询问您正在使用哪种版本的m子。(希望我可以将此帖子作为评论)

您也可以使用撒克逊人:分析扩展。以下对我有用:

<xsl:param name="RefXMLIn"/>
<xsl:variable name="RefXML" select="saxon:parse($RefXMLIn)" xmlns:saxon="http://saxon.sf.net/"/>

它重命名为文本接收XML的参数,并以parse函数的结果填充原始变量。

此扩展名是特定于撒克逊人的,但是萨克森是带有m子的默认XML库。

最新更新