我有一个XML文件,我希望使用XSLT复制一些元素,但是它添加了xmlns =" "在复制元素中。
XSLT
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.example.com/rsd/DataAccess"
exclude-result-prefixes="x"
>
<xsl:output method="xml" indent="yes"/>
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="x:Adapter[@Key='AuditLogging']">
<xsl:copy-of select="."/>
<Adapter Key="AutoExport"></Adapter>
</xsl:template>
</xsl:stylesheet>
XML
<Adapters xmlns="http://www.example.com/rsd/DataAccess">
<Adapter Key="LASTCHANGEDATE" />
<Adapter Key="AuditLogging" />
</Adapters>
输出XML
<Adapters xmlns="http://www.example.com/rsd/DataAccess">
<Adapter Key="LASTCHANGEDATE" />
<Adapter Key="AuditLogging" />
<Adapter Key="AutoExport" xmlns="" />
</Adapters>
如何防止添加xmlns =&#34; &#34;在元素中。
答案 0 :(得分:1)
这是因为在您的输入XML中,所有元素都属于命名空间
<Adapters xmlns="http://www.example.com/rsd/DataAccess">
但是,当您在模板中创建新的Adapter
元素时,就像这样......
<Adapter Key="AutoExport">
您实际上是在创建一个不属于任何名称空间的新元素,因此输出中会显示xmlns=''
来表明这一点。
一种解决方案是在XSLT中声明一个默认命名空间,这样您在XSLT中创建的任何未加前缀的元素都将成为此命名空间的一部分。
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.example.com/rsd/DataAccess"
xmlns="http://www.example.com/rsd/DataAccess" exclude-result-prefixes="x">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="x:Adapter[@Key='AuditLogging']">
<xsl:copy-of select="."/>
<Adapter Key="AutoExport" />
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
问题是在XSL下面的声明
<xsl:template match="x:Adapter[@Key='AuditLogging']">
<xsl:copy-of select="."/>
<Adapter Key="AutoExport">
</Adapter>
</xsl:template>
在不同 xml命名空间中创建新元素而不是根元素(已定义xmlns="http://www.example.com/rsd/DataAccess"
)
最简单的方法是在新元素中声明适当的命名空间,但并非所有XSL编译器都会将其删除。
您也可以尝试Define a default namespace for use in XSL XPaths with xpath-default-namespace中的建议,但我不知道正在使用哪个版本