这个xslt样式表究竟是如何工作的?

时间:2017-06-27 09:25:41

标签: xml xslt wso2 wso2esb xslt-2.0

我是 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>

2 个答案:

答案 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来确保新元素上唯一的名称空间是实际需要的名称空间。