xsl:document

时间:2019-03-25 16:37:44

标签: variables xslt

我最初创建了以下变量:

<xsl:variable as="document-node()" name="changesTexts">
            <xsl:document>
                <ps >
                    <p>Processed with <ptr target="#{$applicationID}"/>.</p>
                    <p>proofreading according to workflow 1.1.</p>
                </ps>
            </xsl:document>
</xsl:variable>

当我尝试像这样访问它

<xsl:variable name="p" select="$changesTexts//p"/>

它不起作用:结果为空item()。

将名称空间添加到根元素后,

<ps xmlns="http://www.music-encoding.org/ns/mei">

我可以通过以下方式访问所需的元素:

  <xsl:variable name="p" select="$changesTexts//mei:p"/>

所以基本上我解决了我的问题,但是我想了解事情的运作方式。我不知道在第一种情况下元素会获得哪种默认名称空间。我尝试过:

  • name()(顺便说一句,这也不会向我显示常规xml文档中的名称空间)
  • namespace-uri()

此外,我在调试器中注意到,变量$ changesTexts的类型为document-node,在其他情况下,当我使用fn:document()时,变量的类型为document-node(1 )。所以显然有一些细微的差异(?)

1 个答案:

答案 0 :(得分:1)

当您在XSLT中使用文字结果元素S在结果树中创建元素R时,R的扩展名将与S的扩展名相同:即,它将具有相同的本地名和相同的名称空间。

因此,由/usr/local/share/android-sdk<ps>指令构造的元素的命名空间由样式表中声明的默认命名空间决定(可能在<p>元素上,但可以在一些内部元素)。