Я хочу выполнить условие, чтобы игнорировать определенный PDF из списка XML через XSLT - PullRequest
0 голосов
/ 03 апреля 2019
<content template="document-gallery">
      <document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Memphis/808638903en.pdf" title="Complete Owner's Guide"/>
      <document lanuage="fr" ref="http://manuals.frigidaire.com/prodinfo_pdf/Memphis/808638903fr.pdf" title="Complete Owner's Guide"/>
      <document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Memphis/809008405.pdf" title="Wiring Diagram"/>
      <document lanuage="en, es, fr" ref="http://manuals.frigidaire.com/prodinfo_pdf/Memphis/809018701.pdf" title="Installation Instructions"/>
      <document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Specsheets/E30DF74TP_0418_EN.pdf" title="Product Specifications Sheet"/>
    </content>

Как указано выше, xml, если lanuage = 'fr' и lanuage = 'es' игнорируют этот PDF, а если pdf оканчивается на 'es.pdf' и 'fr.pdf', также игнорируют его. Но, если lanuage = 'en, es, fr', не игнорируйте этот PDF

Вот что я написал:

<xsl:template match="document">
            <xsl:if test="not(matches(@lanuage,'sp') or ends-with(@ref,'sp.pdf') or matches(@lanuage,'fr') or ends-with(@ref,'fr.pdf')) or matches(@lanuage,'en')">
                <xsl:variable name="href" select="js:call($resource-to-collect,string(@ref))"/>
                <a type="{name()}" href="{$href}"><xsl:apply-templates select="@* except(@ref)"/><xsl:apply-templates select="node()"/></a>
            </xsl:if>
        </xsl:template>

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 03 апреля 2019

Рассмотрите возможность объединения совпадений строк с каналами | и запускайте условное сопоставление с шаблоном вместо <xsl:if>.Из-за совпадения fr и es in en, es, fr , добавьте условие or для точного совпадения строки:

  <xsl:template match="document[not(matches(@lanuage, 'fr|es') or
                                    ends-with(@ref, 'fr.pdf|es.pdf'))
                                or @lanuage = 'en, es, fr']]">
      <xsl:variable name="href" select="js:call($resource-to-collect,string(@ref))"/>
      <a type="{name()}" href="{$href}">
         <xsl:apply-templates select="@* except(@ref)"/>
         <xsl:apply-templates select="node()"/>
      </a>
  </xsl:template>

XSLT Demo (удаляет неизвестный js:call вызов)

...