我看到了类似的问题:
XSLT - How to select XML Attribute by Attribute?
但在我的情况下,我的select语句没有使用答案中提到的/
。在我的例子中,我没有使用文字文本值,而是使用当前元素的值。见下文。
好的,我有这个外部XML文件:
<?xml version="1.0" encoding="utf-8"?>
<Lessons>
<Study Number="1" Page="83"/>
<Study Number="2" Page="86"/>
<Study Number="3" Page="89"/>
<Study Number="4" Page="93"/>
<Study Number="5" Page="97"/>
<Study Number="6" Page="101"/>
<Study Number="7" Page="105"/>
<Study Number="8" Page="107"/>
<Study Number="9" Page="111"/>
<Study Number="10" Page="115"/>
<Study Number="11" Page="118"/>
<Study Number="12" Page="121"/>
<Study Number="13" Page="124"/>
<Study Number="14" Page="128"/>
<Study Number="15" Page="131"/>
<Study Number="16" Page="135"/>
<Study Number="17" Page="139"/>
<Study Number="18" Page="143"/>
<Study Number="19" Page="145"/>
<Study Number="20" Page="147"/>
<Study Number="21" Page="150"/>
<Study Number="22" Page="153"/>
<Study Number="23" Page="157"/>
<Study Number="24" Page="160"/>
<Study Number="25" Page="166"/>
<Study Number="26" Page="170"/>
<Study Number="27" Page="174"/>
<Study Number="28" Page="179"/>
<Study Number="29" Page="181"/>
<Study Number="30" Page="186"/>
<Study Number="31" Page="190"/>
<Study Number="32" Page="194"/>
<Study Number="33" Page="197"/>
<Study Number="34" Page="202"/>
<Study Number="35" Page="206"/>
<Study Number="36" Page="209"/>
<Study Number="37" Page="212"/>
<Study Number="38" Page="215"/>
<Study Number="39" Page="220"/>
<Study Number="40" Page="223"/>
<Study Number="41" Page="226"/>
<Study Number="42" Page="230"/>
<Study Number="43" Page="234"/>
<Study Number="44" Page="236"/>
<Study Number="45" Page="240"/>
<Study Number="46" Page="244"/>
<Study Number="47" Page="247"/>
<Study Number="48" Page="251"/>
<Study Number="49" Page="255"/>
<Study Number="50" Page="258"/>
<Study Number="51" Page="263"/>
<Study Number="52" Page="265"/>
<Study Number="53" Page="268"/>
</Lessons>
在我的XSL脚本中,我正在进行如下调用:
<xsl:apply-templates select="BibleReadingM/@StudyPoint"/>
这是模板:
<xsl:template match="@StudyPoint">
<xsl:variable name="StudyPageNumbers" select="document('StudyPointPageNumbers.xml')" />
<xsl:text> (Page: </xsl:text>
<xsl:value-of select="$StudyPageNumbers/Lessons/Study[@Number=.]/@Page" />
<xsl:text>)</xsl:text>
</xsl:template>
我正在尝试从链接的数据文件(@Number=<current_value>
)中找到正确的行,然后显示其他属性@Page
在同一排。
或者我是否需要重新设计我的XML数据文件?
答案 0 :(得分:1)
改变这个:
<xsl:value-of select="$StudyPageNumbers/Lessons/Study[@Number=.]/@Page"/>
为:
<xsl:value-of select="$StudyPageNumbers/Lessons/Study[@Number=current()]/@Page"/>
请参阅此处的说明:https://www.w3.org/TR/xslt/#misc-func
或者(最好是恕我直言)使用 key 来执行查询:
<xsl:key name="studies" match="Study" use="@Number" />
<xsl:template match="@StudyPoint">
<xsl:text> (Page: </xsl:text>
<xsl:variable name="num" select="." />
<!-- change context to use a key -->
<xsl:for-each select="document('StudyPointPageNumbers.xml')">
<xsl:value-of select="key('studies', $num)/@Page"/>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>