根据第一个属性选择行后显示第二个属性的值

时间:2017-08-22 12:05:39

标签: xslt-1.0

我看到了类似的问题:

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数据文件?

1 个答案:

答案 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>