使用依赖于输入XML的命名空间创建元素?

时间:2015-05-26 16:56:47

标签: xml xslt

作为XSLT 1.0转换的一部分,我需要匹配local-name()是(例如)fred的元素。显然,在这种情况下,可能存在有效的命名空间,或者可能没有。

在该匹配中,我需要创建一个本地名称应为location的元素。

<xsl:element>是否足够用于此目的?我应该明确设置其namespace属性吗?是否有另一种方法来创建一个元素,其命名空间被适当地设置,如果有的话,如果没有则省略?

1 个答案:

答案 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/> 没有名称空间。