Behaviour of xsl:value-of inside an xsl:for-each



当节点名称是同一文档中另一个节点的值时,我似乎无法检索节点的值。 让我举例说明。

首先是文档:

<?xml version="1.0" encoding="UTF-8"?>
<Doc>
    <Schools>
        <School>
            <Id>5489</Id>
            <Name>St Thomas</Name>
            <Address>High Street, London, England</Address>
        </School>
        <School>
            <Id>7766</Id>
            <Name>Anderson Boys School</Name>
            <Address>Haymarket, Edinborough</Address>
        </School>
    </Schools>
    <FamilySmith>
        <Children>
            <Child>
                <Name>Thomas</Name>
                <School_Id>5489</School_Id>
            </Child>
            <Child>
                <Name>Andrew</Name>
                <School_Id>7766</School_Id>
            </Child>
        </Children>
    </FamilySmith>
</Doc>

我只想显示以下内容: 托马斯前往英国伦敦高街的圣托马斯。 安德鲁就读于爱丁堡干草市场的安德森男校

使用下面的 xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
        <xsl:output method="text"/>
        <xsl:template match="/Doc">
        <xsl:apply-templates select="FamilySmith"/>
    </xsl:template>
    <xsl:template match="FamilySmith">
        <xsl:for-each select="Children/Child">
            <xsl:text>&#xa; </xsl:text>
            <xsl:value-of select="Name"/>
            <xsl:text> goes to </xsl:text>
            <xsl:value-of select="/Doc/Schools/School[Id = School_Id]/Name"/>
            <xsl:text> at </xsl:text>
            <xsl:value-of select="/Doc/Schools/School[Id = School_Id]/Address"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

但似乎表达式/Doc/Schools/School[Id = School_Id]...不起作用,因为它每次都返回一个空值。 结果如下。

托马斯去 安德鲁去

有什么提议吗? 谢谢。

您正在寻找current()函数:

<xsl:value-of select="/Doc/Schools/School[Id = current()/School_Id]/Name"/>

您之前的尝试是寻找具有相同值的IdSchool_Id子元素的 School 元素,而您实际想要的是将 School 的 Id 与作为当前for-each迭代目标的ChildSchool_Id子元素进行比较,即谓词外部的当前上下文节点。这就是current()给你的。

相关内容

  • 没有找到相关文章

最新更新