Как создать несколько тегов на основе значения, разделенного запятыми, из одного тега в XSLT? - PullRequest
0 голосов
/ 11 октября 2018

Задано для ввода в виде XML:

<root>
<article> test1, test2, test3 </article>
</root>

и теперь для генерации требуется логика XSLTвывести XML как

<article>test1</article> <article>test2</article> <article>test3</article>

1 Ответ

0 голосов
/ 11 октября 2018

Как правило, вам нужно tokenize содержимое элемента (ов) article и создать новый элемент article для каждого токена с помощью xsl:element, в XSLT 3 один способ достичь этого - с помощью

  <xsl:template match="article">
      <xsl:apply-templates select="tokenize(., ',')">
          <xsl:with-param name="element-name" select="node-name()"/>
      </xsl:apply-templates>
  </xsl:template>

  <xsl:template match=".[. instance of xs:string]">
      <xsl:param name="element-name"/>
      <xsl:element name="{$element-name}">{.}</xsl:element>
  </xsl:template>

Минимальная, но полная выборка будет

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    expand-text="yes"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output indent="yes"/>

  <xsl:template match="article">
      <xsl:apply-templates select="tokenize(., ',')">
          <xsl:with-param name="element-name" select="node-name()"/>
      </xsl:apply-templates>
  </xsl:template>

  <xsl:template match=".[. instance of xs:string]">
      <xsl:param name="element-name"/>
      <xsl:element name="{$element-name}">{.}</xsl:element>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty -development.net / pPqsHU8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...