2014-11-25 51 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