【发布时间】:2011-06-27 06:37:07
【问题描述】:
我正在使用 xsl 元素命名空间属性在元素中添加命名空间。这会在结果中的子元素中添加空命名空间。
这是将命名空间添加到元素“Auto”中的 XSL
编辑 - 我的 xsl 的简短版本
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="no"/>
<xsl:template match="/">
<xsl:element name="Root">
<xsl:element name="Auto" namespace="http://www.Root.com/XMLSchema/Auto">
<xsl:element name="Applicant">
<xsl:element name="ApplicantType">
<xsl:text>Applicant</xsl:text>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="Life" namespace="http://www.Root.com/XMLSchema/Auto">
<xsl:element name="Applicant">
<xsl:element name="ApplicantType">
<xsl:text>Applicant</xsl:text>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
这里是XSL转换的xml
<Root>
<Auto xmlns="http://www.Root.com/XMLSchema/Auto">
<Applicant xmlns="">
<ApplicantType>Applicant</ApplicantType>
</Applicant>
</Auto>
</Root>
如果您看到申请人元素,则转换添加了 xmlns=""。如何移除这个空的命名空间?
【问题讨论】:
-
好吧!如果您不想要 null 默认命名空间,我只需为所有样式表全局声明想要的命名空间。
-
那么
Applicant和ApplicantType元素从何而来?如果它们来自输入和输出,您希望它们与Auto元素位于相同的命名空间中,那么您不能将它们复制过来,而是需要对其进行转换。如果您在样式表中创建这些元素,那么只需确保在与Auto元素相同的命名空间中创建它们,例如做<Auto xmlns="http://www.Root.com/XMLSchema/Auto"><Applicant><ApplicantType>Applicant</ApplicantType></Applicant></Auto>. -
您需要显示生成
Applicant和ApplicantType元素的XSL。此外,您在对问题的描述中混淆了“命名空间”和“命名空间声明”......将这两者分开可能有助于您掌握解决方案。