从XSLT中的节点集中的变量中获取元素

时间:2014-01-27 18:42:18

标签: xml xslt xpath

我试图从XSLT文档中的变量中获取值。这是我的代码:

<?xml version="1.0" encoding="utf-8"?>

<xsl:template match="/">

  <Composition xmlns="Playlist">
    <xsl:variable name="source_var">
        <Source identifier="0">Inside Source</Source>
    </xsl:variable>

    <Video>
        <xsl:value-of select="ms:node-set($source_var)/Source"/>
    </Video>
    </Composition>

</xsl:template>

它不起作用。输出是这样的:

<Composition xmlns="Playlist"> <Video></Video> </Composition>

应该如此:

<Composition xmlns="Playlist"> <Video>Inside Source</Video> </Composition>

当我从xmlns="Playlist"标记中删除名称空间<Composition>时,它可以正常工作。所以我认为它与名称空间有关,但我必须保留命名空间。

我觉得ms:node-set($source_var)/Source正在寻找错误的命名空间,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

更改

<xsl:variable name="source_var">
    <Source identifier="0">Inside Source</Source>
</xsl:variable>

<xsl:variable name="source_var" xmlns="">
    <Source identifier="0">Inside Source</Source>
</xsl:variable>

如果可以,或

<xsl:variable name="source_var">
    <Source xmlns="" identifier="0">Inside Source</Source>
</xsl:variable>

如果您无法更改元素的命名空间,则需要在路径中使用前缀,例如你需要

<xsl:value-of select="ms:node-set($source_var)/ns1:Source" xmlns:ns1="Playlist"/>

当然,您可以将value-of放在xsl:stylesheet上,而不是将声明放在{{1}}上。