Jav*_*cky 7 xslt xml-namespaces
我有一个XSL文件来传输另一个XSL文件.我希望命名空间声明在根标记上,而不是在每个元素上重复!
这是我的样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mynamespace="somenamespace" version="2.0">
<xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes" />
<xsl:template match="myMatchedNode">
<mynamespace:tag>Some text i want inserted into the xsl</mynamespace:tag>
<xsl:copy>
<xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
它输出这样的东西:
....
<mynamespace:tag xmlns:mynamespace="somenamespace">Some text i want inserted into the xsl</mynamespace:tag>
....
Run Code Online (Sandbox Code Playgroud)
如何强制命名空间声明到结果的根标记?!
您需要将命名空间节点插入到结果树的document元素中.有几种方法可以执行此操作,具体取决于您使用的是XSLT 1.0还是2.0.以下是2.0解决方案.我假设您正在对输入文档进行修改后的身份转换(您的问题没有真正指定):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- special rule for the document element -->
<xsl:template match="/*">
<xsl:copy>
<!-- Add a namespace node -->
<xsl:namespace name="mynamespace" select="'somenamespace'"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- the identity template -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- the rest of your rules -->
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
有关控制输出文档中命名空间的所有不同技术的完整内容,请查看我网站上"XSLT中的命名空间"一文中的" 不够命名空间"部分.
| 归档时间: |
|
| 查看次数: |
12826 次 |
| 最近记录: |