我正在尝试生成XML输出,并且我创建了一个XSLT,它将这样做。但是根节点缺少一些名称间距。如何将Namespace添加到XML结构的根元素。这就是我正在使用的XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:doc="urn:sapcom:document:sap:rfc:functions" xmlns:r="http://www.castiron.com/response" exclude-result-prefixes="r">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:element name="imageScene7Request">
<xsl:element name="productIds">
<xsl:for-each select="r:productGetAllByIdsResponse/r:payload/r:products">
<xsl:value-of select="r:id"/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
命名空间我想添加到根http://www.castiron.com/response
<?xml version="1.0" encoding="UTF-8"?>
<productGetAllByIdsResponse xmlns="http://www.castiron.com/response">
<rcode>0</rcode>
<rmessage>Success</rmessage>
<payload>
<products>
<id>4022280</id>
</products>
<products>
<id>4022280</id>
</products>
</payload>
</productGetAllByIdsResponse>
你会看到,当你运行时,它会给你:
<?xml version="1.0" encoding="utf-8"?>
<imageScene7Request>
<productIds>4022280,4022280</productIds>
</imageScene7Request>
但是我想这样:
<?xml version="1.0" encoding="utf-8"?>
<imageScene7Request xmlns="http://www.castiron.com/response">
<productIds>4022280,4022280</productIds>
</imageScene7Request>
然而它工作了,然后它给第二个标签一个空名称空间,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<imageScene7Request xmlns="http://www.castiron.com/response">
<productIds xmlns="">4022280,4022280</productIds>
</imageScene7Request>
有没有办法删除它?
答案 0 :(得分:3)
由于您静态地知道结果元素的名称是什么,因此使用文字结果元素而不是xsl:element会好得多:
<xsl:template match="/">
<imageScene7Request xmlns="http://www.castiron.com/response">
<productIds>
<xsl:for-each select="r:productGetAllByIdsResponse/r:payload/r:products">
<xsl:value-of select="r:id"/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</productIds>
</imageScene7Request>
</xsl:template>
如果您确实使用xsl:element,则需要确保使用namespace属性来确保该元素位于正确的命名空间中。
答案 1 :(得分:2)
我认为你只需要在样式表中明确指定命名空间:
<xsl:element name="imageScene7Request" namespace="http://www.castiron.com/response">
<xsl:element name="productIds">
...
</xsl:element>
</xsl:element>
答案 2 :(得分:1)
这有用吗?
<xsl:stylesheet xmlns="http://www.castiron.com/response" ...>
这会将XSLT中所有元素的名称空间设置为http://www.castiron.com/response