使用 Xsl-Key 和 generate-id() 函数

Using Xsl-Key and generate-id() function

我会在第一个 IMG 中关联第一个 ATTACHED_FILENAME 和 在第二个 IMG 中,第二个附加文件名。

这是我的 XML:

<INSTRUCTION_LIST_ITEM>
    <NTC_SD_INSTRUCT>
      <ACTION>Sostituire</ACTION>
      <PLACEMENT>le righe 10 &#xF7; 18 con:</PLACEMENT>
      <DESCRIPTION>
        <P>Il porto &#xC3;&#xA8; protetto da un molo foraneo.</P>
        <P>
          <IMG border="0" hspace="0" alt="" align="baseline" src="C:\Users\l_sturla\Desktop\albany.jpg"/>
        </P>
        <P>Ben visibile da nord &#xC3;&#xA8; il faro della Vittoria.</P>
        <P>
          <IMG border="0" hspace="0" alt="" align="baseline" src="C:\Users\l_sturla\Desktop\Faro vittoria.JPG"/>
        </P>
        <P> </P>
        <P>Mantenersi a distanza di sicurezza.</P>
      </DESCRIPTION>
      <ATTACHMENT_LIST>
        <ATTACHMENT>
          <ATTACHED_FILENAME>albany.jpg</ATTACHED_FILENAME>
        </ATTACHMENT>
        <ATTACHMENT>
          <ATTACHED_FILENAME>Faro vittoria.JPG</ATTACHED_FILENAME>
        </ATTACHMENT>
      </ATTACHMENT_LIST>
    </NTC_SD_INSTRUCT>
  </INSTRUCTION_LIST_ITEM>

我创建了这个 XSLT:

<xsl:template match="//IMG">
    <span style="font-style:italic">
        <xsl:choose>
            <xsl:when  test="count(ancestor::DESCRIPTION//IMG) = count(ancestor::DESCRIPTION/following-sibling::ATTACHMENT_LIST/ATTACHMENT/ATTACHED_FILENAME)">
             <img>
                <xsl:attribute name="src">
                    <xsl:value-of select="ancestor::NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT/ATTACHED_FILENAME"/>
                </xsl:attribute>
              </img>
            </xsl:when>             
        </xsl:choose>
    </span>
</xsl:template>

但这总是给出第一张图片。 ATTACHED_FILENAME tag是属性src的参数。

如果你定义一个键<xsl:key name="attachment-by-pos" match="NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT" use="concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(preceding-sibling::ATTACHMENT))"/>,那么你可以使用一个模板

<xsl:template match="IMG">
    <span style="font-style:italic">
      <img src="{key('attachment-by-pos', concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(../preceding-sibling::*//IMG)))/ATTACHED_FILENAME}"/> 
     </span>
</xsl:template>

尝试

<xsl:template match="IMG">
  <xsl:variable name="counter">
   <xsl:number level="any" from="DESCRIPTION"/>
  </xsl:variable>
  <img src="{(//ATTACHED_FILENAME)[number($counter)]}"/>
</xsl:template>