作为XSLT 1.0转换的一部分,我需要匹配local-name()
是(例如)fred
的元素。显然,在这种情况下,可能存在有效的命名空间,或者可能没有。
在该匹配中,我需要创建一个本地名称应为location
的元素。
<xsl:element>
是否足够用于此目的?我应该明确设置其namespace
属性吗?是否有另一种方法来创建一个元素,其命名空间被适当地设置,如果有的话,如果没有则省略?
答案 0 :(得分:1)
是的,您可以使用guava
来匹配具有本地名称&#34; fred&#34;的元素。无论其命名空间如何。
在该匹配中,我需要创建一个本地名称应该的元素 是
*[local-name() = 'fred']
。
在这里,你的问题有点不清楚。您在输出文档中创建的元素的命名空间(或缺少命名空间)取决于您;它不需要与输入文档有任何联系。如果它应该以某种方式绑定到输入文档中找到的命名空间,则必须说明命名空间应该来自输入文档的哪一部分。
更新下面每个OP评论:
我想使用父fred元素的命名空间,无论它是什么 是,或者如果它为空/空。
啊,好吧,这个例子可能会有所帮助。给出这个XML输入文档
location
以下XSLT
<root xmlns="http://www.example.com">
<fred/>
</root>
将生成此输出XML
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*[local-name() = 'root']/*[local-name() = 'fred']">
<xsl:element name="location"
namespace="{namespace-uri()}"/>
</xsl:template>
</xsl:stylesheet>
使用输入XML中<?xml version="1.0" encoding="UTF-8"?>
<location xmlns="http://www.example.com"/>
元素的命名空间。
当给出这个XML输入文档时
fred
将生成此输出XML
<root>
<fred/>
</root>
其中<?xml version="1.0" encoding="UTF-8"?>
<location/>
没有名称空间。