Преобразование XSL - Превращение списка во вложенные элементы. Как я могу это сделать? - PullRequest
1 голос
/ 09 марта 2012

У меня есть куча сообщений в более старой версии схемы.Я хочу использовать сообщения из старой схемы, а затем преобразовать их в новую форму схемы.Я действительно ценю, если кто-нибудь может мне помочь с этим.

Моя новая схема

<Audit>
       <time>12:35</time>
       <number>13354</number>
       <previousAudit>
               <time>2:54</time>
               <number>12667</number>
               <previousAudit>
                      <time>7:05</time>
                      <number>10659</number>       
                      <previousAudit/>
               </previousAudit>
       </previousAudit>
</Audit>       


My Old Schema
-------------

<MyAuditList>
<Audit>
       <time>12:35</time>
       <number>13354</number>      
</Audit>       
<Audit>
       <time>1:27</time>
       <number>13650</number>      
</Audit>       
<Audit>
       <time>7:05</time>
       <number>10659</number>      
</Audit>       
</MyAuditList>

Итак, я хочу рекурсивно прочитать мою старую схему (список аудита сообщений и поместить его в предыдущую форму аудита, как указано выше).xsl?Большое спасибо заранее за вашу помощь.

1 Ответ

0 голосов
/ 10 марта 2012

Использование:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="MyAuditList">
    <Audit>
      <xsl:copy-of select="Audit[1]/*"/>
      <xsl:apply-templates select="Audit[2]"/>
    </Audit>
  </xsl:template>

  <xsl:template match="Audit">
    <previousAudit>
      <xsl:copy-of select="*"/>
      <xsl:apply-templates select="following-sibling::Audit"/>
    </previousAudit>
  </xsl:template>

</xsl:stylesheet>

Выход:

<Audit>
  <time>12:35</time>
  <number>13354</number>
  <previousAudit>
    <time>1:27</time>
    <number>13650</number>
    <previousAudit>
      <time>7:05</time>
      <number>10659</number>
    </previousAudit>
  </previousAudit>
</Audit>

Если вам нужно вывести пустое previousAudit, используйте это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="MyAuditList">
    <Audit>
      <xsl:copy-of select="Audit[1]/*"/>
      <previousAudit>
        <xsl:apply-templates select="Audit[2]"/>
      </previousAudit>
    </Audit>
  </xsl:template>

  <xsl:template match="Audit">
    <xsl:copy-of select="*"/>
    <previousAudit>
      <xsl:apply-templates select="following-sibling::Audit"/>
    </previousAudit>
  </xsl:template>

</xsl:stylesheet>

Выход:

<Audit>
  <time>12:35</time>
  <number>13354</number>
  <previousAudit>
    <time>1:27</time>
    <number>13650</number>
    <previousAudit>
      <time>7:05</time>
      <number>10659</number>
      <previousAudit />
    </previousAudit>
  </previousAudit>
</Audit>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...