当节点名称是同一文档中另一个节点的值时,我似乎在检索节点的值时遇到问题。让我来说明一下。
首先是文件:
<?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>
我只想显示以下内容: 托马斯去英国伦敦高街的圣托马斯。 安德鲁去爱丁堡Haymarket的安德森男子学校
使用以下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] ...不起作用,因为它每次都返回一个空值。结果如下。
托马斯去了 安德鲁去了任何优惠请求?感谢。
答案 0 :(得分:0)
您正在寻找current()
function:
<xsl:value-of select="/Doc/Schools/School[Id = current()/School_Id]/Name"/>
您之前的尝试是寻找具有Id
和School_Id
孩子具有相同价值的学校元素,而您实际想要的是将学校的ID与{{1}进行比较} School_Id
的子节点,它是Child
当前迭代的目标,即来自谓词之外的当前上下文节点。这是for-each
给你的。