当节点名称是同一文档中另一个节点的值时,我似乎无法检索节点的值。 让我举例说明。
首先是文档:
<?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>
 </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"/>
您之前的尝试是寻找具有相同值的Id
和School_Id
子元素的 School 元素,而您实际想要的是将 School 的 Id 与作为当前for-each
迭代目标的Child
的School_Id
子元素进行比较,即谓词外部的当前上下文节点。这就是current()
给你的。