XSLT-преобразование, извлекающее потомков элемента с его дочерними элементами - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь преобразовать простой xml с помощью xslt, но я застрял в очень простом случае, хотя я не смог найти примеров, как правильно его решить.Вот моя структура xml:

<TrackList>
   <Track no="1">
      <Title>Tin Man</Title>
   </Track >
   <Track no="2">
      <Title>Good Ol Days</Title>
    </Track >
    <Track no="3">
      <Title>Thing That Break</Title>
    </Track >
</TrackList>

Я хотел бы получить все треки из TrackList, чтобы иметь возможность:

<TrackList>
   <Track title=""/>
   <Track title=""/>
   <Track title=""/>
</TrackList>

Я попробовал следующие шаблоны xslt:

<xsl:element name="TrackList">
   <xsl:apply-templates select="TrackList"/>
 </xsl:element>

 <xsl:template match="//TrackList">
    <xsl:element name="Track">
       <xsl:attribute name="title">
          <xsl:value-of select="Track/Title"/>
        </xsl:attribute>
    </xsl:element>
</xsl:template>

Хотя я извлекаю только первый элемент должным образом, но остальное игнорируется, кто-то может объяснить и посоветовать, как это можно сделать, правильно извлекая.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018
 <xsl:template match="TrackList">
       <xsl:element name="TrackList">
           <xsl:for-each select="Track">
               <xsl:element name="Track">
                   <xsl:attribute name="title">
                       <xsl:value-of select="Title"/>
                   </xsl:attribute>
               </xsl:element>
           </xsl:for-each>
           </xsl:element>
   </xsl:template>
0 голосов
/ 19 мая 2018

Если вы хотите преобразовать элементы Track, то напишите для них шаблон

  <xsl:template match="Track">
      <Track title="{Title}"/>
  </xsl:template>

, остальное обработайте с помощью шаблона преобразования идентификаторов:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Track">
      <Track title="{Title}"/>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty -development.net / 94hvTz3

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