2012-03-20 4 views
1

У меня есть HTML упорядоченный список с differnent типов напримерПреобразовать HTML упорядоченный список XML

<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 и легко получить текст, но как получить нумерацию на основе типа атрибута ... т.е., B, C .... I, II, III, IV и так далее ... Любая помощь будет оценена.

ответ

2

Если HTML хорошо сформированный XML, да:

XML Input

<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 Output

<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> 
+0

Thanks Dev, он работает очень хорошо. – atif

+0

@atif - Добро пожаловать. +1 за хороший вопрос. –

Смежные вопросы