2014-11-25 49 views
0

我源XML文件作爲追加XML PARAM輸入到目標XML的根節點

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:entry xmlns:ns0="http://www.w3.org/2005/Atom"> 
<ns0:content type="application/xml"> 
    <ns0:properties> 
     <ns0:x>qwerty</ns0:x> 
     <ns0:y>OREQ</ns0:y> 
     <ns0:y>abc</ns0:y> 
    </ns0:properties> 
</ns0:content> 

而且Lingamurthy的答覆後,我更新的XSLT文件看起來如下

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://www.w3.org/2005/Atom" version="1.0"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:param name="documentXML"/> 
<xsl:variable name="temp" select="document($documentXML)"/> 

<xsl:template match="ns0:entry"> 
    <xsl:copy> 
    <xsl:copy-of select="$temp/ns0:entry/*" /> 
    <xsl:copy-of select="*"/> 
</xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

的以上documentXML參數通過爲

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:entry xmlns:ns0="http://www.w3.org/2005/Atom"> 
<ns0:link href="GetArtefactDetailsSet(ArtefactId)/EScHeaderSet" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/EScHeaderSet" title="application/atom+xml;type=feed" type="EScHeaderSet"> 
    <ns0:inline> 
     <ns0:feed/> 
    </ns0:inline> 
</ns0:link> 
</ns0:entry> 

注意,所有這些過程在TIBCO正在運行和documentXML參數isXMLDocument標誌爲真()

運行它時我收到以下錯誤 [javax.xml.transform.TransformerException中] XSLT轉換過程中出現: javax.xml.transform.TransformerException:com.tibco.xml.xquery.ExprException:java.net.MalformedURLException:無協議:

我一直被困在這個幾天需要得到這個拼命做。 生成的XML應該是這樣的

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:entry xmlns:ns0="http://www.w3.org/2005/Atom"> 
<ns0:link href="GetArtefactDetailsSet(ArtefactId)/EScHeaderSet" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/EScHeaderSet" title="application/atom+xml;type=feed" type="EScHeaderSet"> 
    <ns0:inline> 
     <ns0:feed/> 
    </ns0:inline> 
</ns0:link> 
<ns0:content type="application/xml"> 
    <ns0:properties> 
     <ns0:x>qwerty</ns0:x> 
     <ns0:y>OREQ</ns0:y> 
     <ns0:z>abc</ns0:z> 
    </ns0:properties> 
</ns0:content> 
</ns0:entry> 
+0

我不熟悉TIBCO但如果傳遞的參數已經被作爲XML文檔處理,然後我就不叫'就可以了document'功能,我會簡單地使用它在例如'$ documentXML/entry'。但請注意,整個樣式表對於處理輸入數據看起來很奇怪,因爲Xml使用Atom名稱空間,但XSLT無法將此考慮在內。此外,所用的逗號運算符僅適用於XSLT 2.0處理器。 – 2014-11-25 19:20:19

+0

感謝您的迴應,文檔可以作爲xml文檔或xml字符串傳遞,使用isXMLDocument標誌作爲參數傳遞,並且我已經嘗試過使用和不使用'document()',根據Ling​​amurthy的回覆,下面我已更新了xml我將編輯它並更新我將刪除這個符號 – Rahul 2014-11-26 02:50:05

回答

0

您缺少名稱空間聲明。使用下面的XSLT,一些更正已作出:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://www.w3.org/2005/Atom" version="1.0"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:param name="documentXML"/> 
<xsl:template match="ns0:entry"> 
    <xsl:copy> 
     <xsl:copy-of select="$documentXML/ns0:entry/*" /> 
     <xsl:copy-of select="*"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
+0

感謝您的回覆,但上面的轉換中添加了'也給出了相同的錯誤 – Rahul 2014-11-25 13:11:27

+0

看起來像您將文檔名稱作爲參數'documentXML'傳遞。我編輯了我的答案..應該幫助!另外,由於文件名是在參數'documentXML'中發送的,'isXMLDocument'應該是false – 2014-11-25 13:16:06

+0

現在它給出了'在XSLT轉換過程中發生了[javax.xml.transform.TransformerException]:javax.xml.transform.TransformerException :com.tibco.xml.xquery.ExprException:java.net.MalformedURLException:無協議:'所以我認爲它現在解析文檔 – Rahul 2014-11-25 13:17:46