<?xml version="1.0" encoding="UTF-8"?>
<div type="letter">
<head>
<persName type="creator">
<forename>Theo</forename>
<surname>Barnes</surname>
</persName>
<persName type="addressee">
<forename>Alex</forename>
<surname>Rollett</surname>
</persName>
</head>
<opener>
<dateline>
<date when="2015-01">2015-01</date>
<placeName key="Graz">Graz</placeName>
</dateline>
<salute>Hello everybody</salute>
</opener>
</div>
这是我的XSL样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<div>
<head>
<xsl:for-each select="//persName[@type='creator']">
<xsl:text> From </xsl:text>
<xsl:value-of select="forename"/>
<xsl:text> to </xsl:text>
<xsl:value-of select="following-sibling::persName[1]/forename"/>
<xsl:if test="position() != last()">
</xsl:if>
<xsl:text> at </xsl:text>
<!-- her is the error, i think but why-->
<xsl:value-of select="dateline[1]/date"/>
</xsl:for-each>
</head>
</div>
</xsl:template>
</xsl:stylesheet>
我有问题,我无法添加日期行或placeName的值无关紧要。 Id也应该在循环中工作,因为原因是这只是文档的一小部分。所以我的问题是我的错误在哪里。我在代码中提出了问题点。 目前输出是:
From Theo to Alex at
我期待或者更好的是我正在寻找以下输出:
From Theo to Alex at 2015-01 location Graz
一切顺利,并尽快给您朗读。 欢呼声
答案 0 :(得分:0)
的确,你找到了错误的地方。问题是<xsl:value-of select=""/>
指令正确地检索了所需的数据,因为它是在<persName>
节点上的每个上下文。
通过这样的修复,您将得到您想要的东西:
<xsl:value-of select="../../opener/dateline[1]/date"/>
和类似的位置信息:
<xsl:value-of select="../../opener/dateline[1]/placeName"/>
答案 1 :(得分:0)
以下部分中的上下文元素为persName
,因为它位于foreach循环中,您可以循环遍历persName
:
<xsl:value-of select="dateline[1]/date"/>
这是一个可能的XPath表达式,用于从上下文date
获取目标persName
元素:
<xsl:value-of select="following::opener/dateline[1]/date"/>