我是 WSO2 ESB 中的新手,我没有使用 xslt 的经验(我认为它应该与xslt相关而不是WSO2)。
你能帮助我深入了解它.xslt模板文件的作用吗?它应该从我的XML中删除命名空间,但究竟是如何工作的?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()">
</xsl:apply-templates>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
它应该从XML中删除 xmlns =&#34; http://ws.wso2.org/dataservice" 命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<transfer xmlns="http://ws.wso2.org/dataservice">
<providerpid>00AB40</providerpid>
<recipientpid>00AD12</recipientpid>
<symbol>SMTA1234</symbol>
<type>SMTA</type>
<materials>
<doi>10.0155/1463</doi>
<doi>10.0155/1464</doi>
</materials>
</transfer>
答案 0 :(得分:1)
命名空间被xslt删除,因为它不是在xslt中声明,如果你想保留命名空间而不是更改
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
到
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://ws.wso2.org/dataservice">
它将保留您的命名空间
答案 1 :(得分:0)
XSLT中有三条指令用于创建新元素:
文字结果元素:例如<xyz>....</xyz>
。通过这些,new元素获取在包含样式表中声明的所有名称空间,而不是使用exclude-result-prefixes排除的任何名称空间(以及隐式排除的那些,如XSLT名称空间)。
的xsl:副本。这里,new元素从源文档中的相关元素获取所有名称空间。在XSLT 2.0 / 3.0中,您可以使用copy-namespaces属性来阻止这种情况:但即使这样,元素名称也不会发生变化,因此如果它在命名空间中,它将保留在该命名空间中。
< / LI>的xsl:元素。这里新元素只获取(新)元素名称和任何命名空间属性名称实际需要的名称空间。在此示例中,新元素不在命名空间中,因此不会添加命名空间声明。
此样式表使用xsl:element来确保新元素上唯一的名称空间是实际需要的名称空间。