2012-12-13 79 views
0

我想使用XSLT向輸入XML添加一段XML。但產出並不像預期的那樣。 Pelase幫助。使用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轉換這種轉化根據所提供的XSLT轉換其有效載荷XML

回答

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> 
+0

嗨,我已經試過這個,但是這有一個問題。輸出如下所示 ...... < ns3:輸出xmlns:ns3 =」http://mysample.org「> < ns3:reply id =」rep「$ gt; < ns3:zip/ns3:zip > ..... </ns3:輸出> – user1760178

+0

輸出正在被轉義。經過將< and >轉換爲<和> – user1760178

+1

那麼我假定傳入的參數值是一個節點或一系列節點。它似乎是一個帶有XML標記的字符串。我不熟悉Mule,所以我不能分辨是否可以更改參數類型。但是我將編輯我的帖子以顯示如何處理字符串參數。 –

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> 
+0

我嘗試這樣做,輸出爲顯示如下<輸入的xmlns:的xsi = 「http://www.w3.org/2001/XMLSchema-instance」 \t \t \t的xmlns:NS3 =「HTTP: //mysample.org」 \t \t \t的xsi:noNamespaceSchemaLocation = 「nbA2.8.90.xsd」> \t \t \t \t \t \t \t 樣品 \t \t \t \t 樣品 \t \t \t \t \t \t ......... \t \t \t <輸入的xmlns:XSD = 「http://www.w3.org/2001/XMLSchema」 > \t \t \t \t \t \t \t \t \t \t \t \t ............ \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t – user1760178

+0

這仍然沒有給我所需的輸出。 – user1760178

+1

您可以嘗試將'更改爲'' –