使用 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 ÷ 18 con:</PLACEMENT>
<DESCRIPTION>
<P>Il porto è 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 è 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>
我会在第一个 IMG 中关联第一个 ATTACHED_FILENAME 和 在第二个 IMG 中,第二个附加文件名。
这是我的 XML:
<INSTRUCTION_LIST_ITEM>
<NTC_SD_INSTRUCT>
<ACTION>Sostituire</ACTION>
<PLACEMENT>le righe 10 ÷ 18 con:</PLACEMENT>
<DESCRIPTION>
<P>Il porto è 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 è 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>