将html有序列表转换为xml

时间:2012-03-20 16:03:51

标签: html xml xslt

我有一个不同类型的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 个答案:

答案 0 :(得分:2)

如果你的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>