преобразовать упорядоченный список HTML в XML - PullRequest
1 голос
/ 20 марта 2012

У меня есть упорядоченный список html с различными типами, например,

<ol type=a>
    <li>This is list item a</li>
    <li>this is list item b</li>
 </ol> 

<ol type=i>
    <li>This is list item 1</li>
    <li>this is list item 2</li>
 </ol> 

Я хочу знать, можем ли мы преобразовать их в разметку xml, указанную ниже.

<xml>
   <orderlist>
   <li>
       <num>a</num>
       <text>This is list item a</text>
    </li>
    <li>
      <num>b</num>
      <text>This is list item b</text>
   </li>
   </orderlist>
  </xml>

 <xml>
<orderlist>
<li>
   <num>i</num>
    <text>This is list item 1</text>
</li>
<li>
   <num>ii</num>
   <text>This is list item 2</text>
</li>
</orderlist>
</xml>

Я могу поставить соответствиешаблон для LI и легко получить текст, но как получить нумерацию на основе атрибута типа ... т.е. a, b, c .... i, ii, iii, iv и так далее ... Любая помощь будет оценена.

1 Ответ

2 голосов
/ 20 марта 2012

Если ваш HTML является правильно сформированным XML, да:

Ввод XML

<foo>
<ol type="a">
  <li>This is list item a</li>
  <li>this is list item b</li>
</ol> 

<ol type="i">
  <li>This is list item 1</li>
  <li>this is list item 2</li>
</ol>
</foo>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

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

  <xsl:template match="li">
    <li>
      <num><xsl:number format="{../@type}"/></num>
      <text><xsl:apply-templates/></text>
    </li>
  </xsl:template>

</xsl:stylesheet>

Вывод XML

<foo>
   <orderedlist>
      <li>
         <num>a</num>
         <text>This is list item a</text>
      </li>
      <li>
         <num>b</num>
         <text>this is list item b</text>
      </li>
   </orderedlist>
   <orderedlist>
      <li>
         <num>i</num>
         <text>This is list item 1</text>
      </li>
      <li>
         <num>ii</num>
         <text>this is list item 2</text>
      </li>
   </orderedlist>
</foo>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...