管理文本和图像的顺序
Managing sequence of text and images
我需要这样处理文本和图像序列:
- 图片内部通知:如果我们找到DESCRIPTION\IMG,
SRC 的值等于第一个 ATTACHED_FILENAME.
- 外部图片注意:在这种情况下没有第二个描述/
IMG和第二个ATTACHED_FILENAME是一个人。
实际上,我将每个 IMG 关联到相应的 ATTACHED_FILENAME,但如果不存在相应的 IMG,则 ATTACHED_FILENAME 在这种情况下是警报的外部图像。
这是我的 XML:
<NTC_SD_NOTICE>
<PUBLISH_NUMBER>2 caso</PUBLISH_NUMBER>
<PUBLICATION_REF>
<PUBLICATION_SHORT_TITLE>Portolano P8</PUBLICATION_SHORT_TITLE>
<PUBLICATION_EDITION_YEAR>2013</PUBLICATION_EDITION_YEAR>
<PUBLICATION_PAGE>128</PUBLICATION_PAGE>
</PUBLICATION_REF>
<REGION>15-Mar Ligure - Francia (Corsica)</REGION>
<VICINITY>Appartamento tuo</VICINITY>
<SUBJECT>Fotografie</SUBJECT>
<AUTHORITY>Compamare Arzachena</AUTHORITY>
<PROJECT>230/8562</PROJECT>
<INSTRUCTION_LIST>
<INSTRUCTION_LIST_ITEM>
<NTC_SD_INSTRUCT>
<ACTION>Inserire</ACTION>
<PLACEMENT>dopo la riga 1:</PLACEMENT>
<DESCRIPTION>
<P>Dietro al monte si vede una meda cardinale sud.</P>
<P>
<IMG border="0" hspace="0" alt="" align="baseline" src="C:\Users\l_sturla\Desktop\meda.JPG"/> <-- First image
</P>
</DESCRIPTION>
<ATTACHMENT_LIST>
<ATTACHMENT>
<ATTACHED_FILENAME>meda.JPG</ATTACHED_FILENAME> <-- Attribute first image
</ATTACHMENT>
<ATTACHMENT>
<ATTACHED_FILENAME>altro.JPG</ATTACHED_FILENAME> <-- In this case there are no second IMG, this is an external image.
</ATTACHMENT>
</ATTACHMENT_LIST>
</NTC_SD_INSTRUCT>
</INSTRUCTION_LIST_ITEM>
<INSTRUCTION_LIST_ITEM>
<NTC_SD_INSTRUCT>
<ACTION>Sostituire</ACTION>
<PLACEMENT>le righe 34 ÷ 50 con:</PLACEMENT>
<DESCRIPTION>Proseguire per il centro del canale e prestare attenzione al relitto sulla dritta.</DESCRIPTION>
<ATTACHMENT_LIST>
<ATTACHMENT>
<ATTACHED_FILENAME>relitto.JPG</ATTACHED_FILENAME>
</ATTACHMENT>
</ATTACHMENT_LIST>
</NTC_SD_INSTRUCT>
</INSTRUCTION_LIST_ITEM>
</INSTRUCTION_LIST>
</NTC_SD_NOTICE>
这是我的 XSLT 1.0:
内部图像模板:(运行 非常感谢 Martin Honnen)
<!-- TEMPLATE PER LE IMMAGINI INTERNE ALL'AVVISO -->
<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>
外部图像模板:(无效 - 所有 ATTACHED_FILENAME 未与 IMG 关联)
<xsl:template name="allegati">
<center><xsl:text>Allegati:</xsl:text></center>
<xsl:for-each select="INSTRUCTION_LIST/INSTRUCTION_LIST_ITEM/NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT/ATTACHED_FILENAME">
<center>
<img src="{key('attachment-by-pos', concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(../preceding-sibling::*//IMG)))/ATTACHED_FILENAME}"/>
</center>
</xsl:for-each>
</xsl:template>
在这种情况下,输出必须是:
Inserire dopo la riga 1: Dietro al monte si vede una meda cardinale sud.
-IMMAGINE MEDA.jpg-
Sostituire le righe 34 ÷ 50 con:Proseguire per il centro del canale e prestare attenzione al relitto sulla dritta.
指控:
-IMMAGINE altro.jpg-
-IMMAGINE relitto.jpg -
这部分用粗体文本突出显示不 运行.
此致。
在您之前的问题中,Martin Honnen 给出的答案定义了以下键,用于根据 NTC_SD_INSTRUCT
元素中的位置查找 ATTACHMENT
元素。
我认为对于您的新要求,您正在颠倒逻辑,因此您还可以定义一个键来按位置 IMG
元素查找
<xsl:key name="img-by-pos" match="NTC_SD_INSTRUCT/DESCRIPTION/P/IMG" use="concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(../preceding-sibling::*//IMG))"/>
然后,在 allegati
模板的 xsl:for-each
中,您将使用此键检查它们是否是关联的 IMG
试试这个模板
<xsl:template name="allegati">
<center><xsl:text>Allegati:</xsl:text></center>
<xsl:for-each select="INSTRUCTION_LIST/INSTRUCTION_LIST_ITEM/NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT
[not(key('img-by-pos', concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(preceding-sibling::ATTACHMENT))))]">
<center>
<img src="{ATTACHED_FILENAME}"/>
</center>
</xsl:for-each>
</xsl:template>
我需要这样处理文本和图像序列:
- 图片内部通知:如果我们找到DESCRIPTION\IMG, SRC 的值等于第一个 ATTACHED_FILENAME.
- 外部图片注意:在这种情况下没有第二个描述/ IMG和第二个ATTACHED_FILENAME是一个人。
实际上,我将每个 IMG 关联到相应的 ATTACHED_FILENAME,但如果不存在相应的 IMG,则 ATTACHED_FILENAME 在这种情况下是警报的外部图像。
这是我的 XML:
<NTC_SD_NOTICE>
<PUBLISH_NUMBER>2 caso</PUBLISH_NUMBER>
<PUBLICATION_REF>
<PUBLICATION_SHORT_TITLE>Portolano P8</PUBLICATION_SHORT_TITLE>
<PUBLICATION_EDITION_YEAR>2013</PUBLICATION_EDITION_YEAR>
<PUBLICATION_PAGE>128</PUBLICATION_PAGE>
</PUBLICATION_REF>
<REGION>15-Mar Ligure - Francia (Corsica)</REGION>
<VICINITY>Appartamento tuo</VICINITY>
<SUBJECT>Fotografie</SUBJECT>
<AUTHORITY>Compamare Arzachena</AUTHORITY>
<PROJECT>230/8562</PROJECT>
<INSTRUCTION_LIST>
<INSTRUCTION_LIST_ITEM>
<NTC_SD_INSTRUCT>
<ACTION>Inserire</ACTION>
<PLACEMENT>dopo la riga 1:</PLACEMENT>
<DESCRIPTION>
<P>Dietro al monte si vede una meda cardinale sud.</P>
<P>
<IMG border="0" hspace="0" alt="" align="baseline" src="C:\Users\l_sturla\Desktop\meda.JPG"/> <-- First image
</P>
</DESCRIPTION>
<ATTACHMENT_LIST>
<ATTACHMENT>
<ATTACHED_FILENAME>meda.JPG</ATTACHED_FILENAME> <-- Attribute first image
</ATTACHMENT>
<ATTACHMENT>
<ATTACHED_FILENAME>altro.JPG</ATTACHED_FILENAME> <-- In this case there are no second IMG, this is an external image.
</ATTACHMENT>
</ATTACHMENT_LIST>
</NTC_SD_INSTRUCT>
</INSTRUCTION_LIST_ITEM>
<INSTRUCTION_LIST_ITEM>
<NTC_SD_INSTRUCT>
<ACTION>Sostituire</ACTION>
<PLACEMENT>le righe 34 ÷ 50 con:</PLACEMENT>
<DESCRIPTION>Proseguire per il centro del canale e prestare attenzione al relitto sulla dritta.</DESCRIPTION>
<ATTACHMENT_LIST>
<ATTACHMENT>
<ATTACHED_FILENAME>relitto.JPG</ATTACHED_FILENAME>
</ATTACHMENT>
</ATTACHMENT_LIST>
</NTC_SD_INSTRUCT>
</INSTRUCTION_LIST_ITEM>
</INSTRUCTION_LIST>
</NTC_SD_NOTICE>
这是我的 XSLT 1.0:
内部图像模板:(运行 非常感谢 Martin Honnen)
<!-- TEMPLATE PER LE IMMAGINI INTERNE ALL'AVVISO -->
<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>
外部图像模板:(无效 - 所有 ATTACHED_FILENAME 未与 IMG 关联)
<xsl:template name="allegati">
<center><xsl:text>Allegati:</xsl:text></center>
<xsl:for-each select="INSTRUCTION_LIST/INSTRUCTION_LIST_ITEM/NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT/ATTACHED_FILENAME">
<center>
<img src="{key('attachment-by-pos', concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(../preceding-sibling::*//IMG)))/ATTACHED_FILENAME}"/>
</center>
</xsl:for-each>
</xsl:template>
在这种情况下,输出必须是:
Inserire dopo la riga 1: Dietro al monte si vede una meda cardinale sud.
-IMMAGINE MEDA.jpg-
Sostituire le righe 34 ÷ 50 con:Proseguire per il centro del canale e prestare attenzione al relitto sulla dritta.
指控:
-IMMAGINE altro.jpg-
-IMMAGINE relitto.jpg -
这部分用粗体文本突出显示不 运行.
此致。
在您之前的问题中,Martin Honnen 给出的答案定义了以下键,用于根据 NTC_SD_INSTRUCT
元素中的位置查找 ATTACHMENT
元素。
我认为对于您的新要求,您正在颠倒逻辑,因此您还可以定义一个键来按位置 IMG
元素查找
<xsl:key name="img-by-pos" match="NTC_SD_INSTRUCT/DESCRIPTION/P/IMG" use="concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(../preceding-sibling::*//IMG))"/>
然后,在 allegati
模板的 xsl:for-each
中,您将使用此键检查它们是否是关联的 IMG
试试这个模板
<xsl:template name="allegati">
<center><xsl:text>Allegati:</xsl:text></center>
<xsl:for-each select="INSTRUCTION_LIST/INSTRUCTION_LIST_ITEM/NTC_SD_INSTRUCT/ATTACHMENT_LIST/ATTACHMENT
[not(key('img-by-pos', concat(generate-id(ancestor::NTC_SD_INSTRUCT), '|', count(preceding-sibling::ATTACHMENT))))]">
<center>
<img src="{ATTACHED_FILENAME}"/>
</center>
</xsl:for-each>
</xsl:template>