Преобразование данных XML с использованием XSLT - PullRequest
1 голос
/ 14 июля 2011

У меня есть следующая разметка

       <ul>
              <li>this is bullet list</li>
              <li>this is another bullet</li>
              <ul>
                  <li>this is embaded</li>
                  <li>this is embaded</li>
                     <ul>
                        <li>this is furthur embaded</li>
                     </ul>
               </ul>
        </ul>

, и мне нужен скрипт xslt для преобразования в

<xml>
   <unorderlist>
   <list><text>this is bullet list</text></list>
   <list><para><text>this is another bullet</text>
     <unorderlist>
       <list><text>this is embaded</text></list>
       <list><para><text>this is embaded</text>
           <unorderlist>
              <list><text>this is furthur embabed</text></list>
            </unorderlist>
           </para></list>
        </unorderlist>
     </para>
   </list>
</unorderlist>
</xml>

В основном все вложенные элементы должны появляться в последнем теге узла.Любая подсказка будет по достоинству оценена.

1 Ответ

2 голосов
/ 14 июля 2011

Например

<xsl:template match="/">
  <xml>
    <xsl:apply-templates/>
  </xml>
</xsl:template>

<xsl:template match="ul">
  <unorderlist>
    <xsl:apply-templates select="li"/>
  </unorderlist>
</xsl:template>

<xsl:template match="li">
  <list>
    <xsl:choose>
      <xsl:when test="following-sibling::*[1]/self::ul">
        <para>
          <text>
            <xsl:apply-templates/>
          </text>
          <xsl:apply-templates select="following-sibling::*[1]/self::ul"/>
        </para>
      </xsl:when>
      <xsl:otherwise>
        <text>
          <xsl:apply-templates/>
        </text>
      </xsl:otherwise>
    </xsl:choose>
  </list>
</xsl:template>

Если вы хотите поддерживать более сложный ввод, используйте отдельный режим, чтобы перетащить <ul> к предыдущему <li>.

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