Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 管理文本和图像的顺序_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt 管理文本和图像的顺序

Xslt 管理文本和图像的顺序,xslt,xslt-1.0,Xslt,Xslt 1.0,我有必要以这种方式处理文本和图像序列: 图片内部通知:如果我们发现描述\IMG,则 SRC的值等于第一个附加的_文件名。 外部图像注意:在这种情况下,没有第二个描述/ IMG和第二个附加的_文件名是单独的。 在实践中,我将各个附加的\u文件名与每个IMG关联,但如果不存在相应的IMG,则附加的\u文件名在本例中是警报的外部图像 这是我的XML: <NTC_SD_NOTICE> <PUBLISH_NUMBER>2 caso</PUBLISH_NUMBER> &

我有必要以这种方式处理文本和图像序列:

图片内部通知:如果我们发现描述\IMG,则 SRC的值等于第一个附加的_文件名。 外部图像注意:在这种情况下,没有第二个描述/ IMG和第二个附加的_文件名是单独的。 在实践中,我将各个附加的\u文件名与每个IMG关联,但如果不存在相应的IMG,则附加的\u文件名在本例中是警报的外部图像

这是我的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 &#xF7; 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>
外部图像模板:不工作-所有与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>
在这种情况下,输出必须为:

插图1:Dietro al-monte si vede和meda Cardinane sud。 -IMMAGINE MEDA.jpg- 索斯蒂尔·勒里格34÷50 con:根据苏拉·德里塔(sulla dritta)的浮雕艺术中心的进度计划

阿莱格蒂: -IMMAGINE altro.jpg- -IMMAGINE relito.jpg- 用粗体文本突出显示的此部分不运行


致以最诚挚的问候。

在您前面的问题中,Martin Honnen给出的答案定义了以下键,用于根据附件元素在NTC\u SD\u元素中的位置查找附件元素

我认为对于您的新需求,您正在颠倒逻辑,因此您还可以定义一个键来根据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))"/>

感谢蒂姆的宝贵合作。
<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>