在 XSL 翻译中更改 XML 文件的命名空间
因此,我有一个输入文件,它在默认命名空间 (xmlns="companyURL"
) 中使用我公司的命名空间,但我希望我的输出文件使用默认命名空间之外的其他内容 (xmlns:cmp ="companyURL"
)。因此,我使用 cmp
命名空间构建文件,但随后我想复制一些内部元素:
<xsl:element name="cmp:container">
<xsl:for-each select="foo">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:element>
不幸的是,这样做是为每个内部元素定义默认命名空间,使文件变得难以置信冗长且丑陋。简化示例:
Source:
<foo xmlns="companyURL">
<num1>asdf</num1>
<num2>ghjkl</num2>
</foo>
变成:
<cmp:container xmlns:cmp="companyURL">
<num1 xmlns="companyURL">asdf</num1>
<num2 xmlns="companyURL">ghjkl</num2>
</cmp:container>
当然,companyURL
又大又长又丑,而且两个地方都是一样的,所以我更喜欢上面的结果而不是仅仅如下:
<cmp:container xmlns:cmp="companyURL">
<cmp:num1>asdf</cmp:num1>
<cmp:num2>ghjkl</cmp:num2>
</cmp:container>
有没有一种简单的方法可以做到这一点,或者我应该将 cmp
命名空间下的所有内容转换为默认命名空间?如果可能的话,我更愿意使用显式名称空间命名,根据我的经验,它有助于理解 XSLT。
So I have an input file that uses my company's namespace in the default namespace (xmlns="companyURL"
) but I want my output file to use something other than the default namespace (xmlns:cmp="companyURL"
). So I construct my file using the cmp
namespace, but then I want to copy some of the inner elements:
<xsl:element name="cmp:container">
<xsl:for-each select="foo">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:element>
Unfortunately, what this does is define the default namespace for each of those inner elements, making the file incredibly verbose and ugly. Simplified example:
Source:
<foo xmlns="companyURL">
<num1>asdf</num1>
<num2>ghjkl</num2>
</foo>
Turns into:
<cmp:container xmlns:cmp="companyURL">
<num1 xmlns="companyURL">asdf</num1>
<num2 xmlns="companyURL">ghjkl</num2>
</cmp:container>
Of course, companyURL
is big and long and ugly, and it's the same in both places, so I would prefer the above result to just be the following:
<cmp:container xmlns:cmp="companyURL">
<cmp:num1>asdf</cmp:num1>
<cmp:num2>ghjkl</cmp:num2>
</cmp:container>
Is there an easy way to do this, or should I convert everything under the cmp
namespace to the default namespace? I would prefer to use the explicit namespace naming if possible, it aids in understanding the XSLT in my experience.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这种转变:
在提供的 XML 文档上执行时:
产生所需的正确结果:
This transformation:
when performed on the provided XML document:
produces the wanted, correct result: