Может быть, вы мне поможете: я новичок в XSL и совсем не разработчик. Прошу прощения, если он недостаточно ясен.
Контекст: у меня есть файл XML, который я должен разрезать на несколько других файлов XML. Я использую XSL: param, чтобы определить, где вырезать, поскольку это не всегда из одного и того же элемента.
Проблема: мне нужно проверить, находится ли изображение в конце файла результата xsl: (например, никакие другие элементы, кроме элемента NOTES, не могут следовать), и поскольку существует несколько контекстов, я не смог сделать это правильно.
<xsl:param name="resultfile" select="book/preface||book/appendix|//chapter|//part[not(chapter)]"/>
Вот что такое файл XML выглядит так:
<preface>
<dev>
<p></p>
<p></p>
<figure><image></image></figure> <!--needs to be identified-->
</dev>
</preface>
<part>
<chapter>
<section1>
<p></p>
<p></p>
<figure><image></image></figure>
</section1>
<section1>
<p></p>
<p></p>
<p></p>
<figure><image></image></figure> <!--needs to be identified-->
</section1>
<notes><p></p></notes>
</chapter>
</part>
<part><dev><p></p>
<figure><image/></figure><!--needs to be identified-->
</dev></part>
<appendix><dev><figure><image/></figure>
<p></p></dev></appendix>
</book>
То, что я пытался до сих пор:
<xsl:template match="image">
<xsl:choose>
<xsl:when test="parent::figure//following::p[name(parent::node())!='notes'][ancestor::node()=$resultfile]
and not(parent::fig/following::figure[ancestor::node()=$resultfile])">
<xsl:attribute name="type">middle</xsl:attribute></xsl:when>
<xsl:otherwise>
<xsl:attribute name="type">end</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<!--...-->
</xsl:template>
<xsl:template match="image">
<xsl:choose>
<xsl:when test="parent::figure//following::p[name(parent::node())!='notes'][name(../$resultfile) ='chapter' ]
and not(parent::fig/following::figure[name(../$resultfile) ='chapter' ])">
<xsl:attribute name="type">middle</xsl:attribute></xsl:when>
<xsl:otherwise>
<xsl:attribute name="type">end</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<!--...-->
</xsl:template>
, которые не работают, и я могу, до определенного момента, понять, почему это не так нет, но я не могу найти способ решить эту проблему.
Я был бы очень рад, если бы вы могли мне помочь! Спасибо, Мария
*** В основном использует XSLT 2 с Saxon HE и Saxon PE 9.5, но также интересуется и другими решениями.