是否存在组合前缀的方法:给定URN和本地名称的元素的本地名称?
例如使用此代码:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0" version="1.0">
<xsl:template match="/">
<root>
<xsl:element name="element" namespace="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<nested-element>Some text...</nested-element>
</xsl:element>
</root>
</xsl:template>
</xsl:stylesheet>
我得到的结果是:
<root xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<element xmlns="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<nested-element xmlns="">Some text...</nested-element>
</element>
</root>
我想要的结果是:
<root xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<fo:element>
<nested-element>Some text...</nested-element>
</fo:element>
</root>
将URI提供给xsl:元素,该名称具有神奇的前缀(使用与该URI对应的前缀 - 在根元素中声明),并且URI不存在于结果文档中。我希望你明白我想要实现的目标:)
答案 0 :(得分:0)
我假设您有理由明确使用<xsl:element />
,而不是直接声明<fo:element>
元素。
XSLT 1.0 specification允许<xsl:element />
@name
属性to be a qname。因此,您可以通过以通常的方式将其前缀添加到元素 @name 来重用已经声明的命名空间:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<root>
<xsl:element name="fo:element">
<nested-element>Some text...</nested-element>
</xsl:element>
</root>
</xsl:template>
</xsl:stylesheet>
XSLT 1.0处理器将安全地检查前缀是否已声明。
在Saxon 6.5.5中测试过代码。