我正在尝试从已转换的xml中删除名称空间声明
请到这里:http://xslttest.appspot.com/
输入xml:
<Products xmlns="http://api.company.com.au/Data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Product>
<Code>BM54</Code>
</Product>
</Products>
xslt模板
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://api.company.com.au/Data" exclude-result-prefixes="d">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="d:Product">
<DONE>
<xsl:apply-templates select="@* | node()"/>
</DONE>
</xsl:template>
<xsl:template match="@Product">
<xsl:attribute name="DONE">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
结果是:
<Products xmlns="http://api.company.com.au/Data" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DONE xmlns="">
<Code xmlns="http://api.company.com.au/Data">BM54</Code>
</DONE>
</Products>
我希望它是:
<Products xmlns="http://api.company.com.au/Data" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DONE>
<Code>BM54</Code>
</DONE>
</Products>
答案 0 :(得分:2)
只需更改
<xsl:template match="d:Product">
<DONE>
<xsl:apply-templates select="@* | node()"/>
</DONE>
</xsl:template>
到
<xsl:template match="d:Product">
<xsl:element name="DONE" namespace="http://api.company.com.au/Data">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
答案 1 :(得分:1)
如果要在默认命名空间中创建元素,则更改解决方案是预先声明:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d="http://api.example.com.au/Data"
xmlns="http://api.example.com.au/Data"
exclude-result-prefixes="d">
<!-- rest of the document -->
这使得d
和空命名空间的简写都对应于http://api.company.com.au/Data
这就是你想要的,即使它不是你问的
然后你可以使用原始代码:
<xsl:template match="d:Product">
<DONE>
<xsl:apply-templates select="@* | node()"/>
</DONE>
</xsl:template>
正如keshlam指出的那样,这是因为你将它放在与文档其余部分相同的命名空间中。