我正在进行HTML转换为xml。在html中我有这样的表,
<doc>
<ol>
<li>
<p>List<span style="color: rgb(255,0,255);">The scope of this project is to:</span></p>
<ol>
<li>nested list1</li>
<li>nested <span style="color: rgb(255,0,255);">The scope of this project is to:</span> list1</li>
<li>nested list1</li>
<li>nested list1</li>
<li>nested list1</li>
</ol>
</li>
<li>
<p>List<span style="color: rgb(255,0,255);">The scope of this project is to:</span></p>
</li>
<li>
<p>List<span style="color: rgb(255,0,255);">The scope of this project is to:</span></p>
</li>
</ol>
这里我需要将html元素名称转换为某些xml元素名称,并且应该通过<para>
元素覆盖文本内容。
所以我的输出应该是,
<doc>
<oli>
<listitem><para>List<style type="color: rgb(255,0,255);">The scope of this project is to:</style></para>
<oli>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested <style type="color: rgb(255,0,255);">The scope of this project is to:</style> list1</para></listitem>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested list1</para></listitem>
</oli>
</listitem>
<listitem><para>
List<style type="color: rgb(255,0,255);">The scope of this project is to:</style>
</para></listitem>
<listitem><para>
List<style type="color: rgb(255,0,255);">The scope of this project is to:</style>
</para></listitem>
</oli>
</doc>
我写了以下xsl来将html转换为xml,
<xsl:template match="ol">
<oli>
<xsl:apply-templates/>
</oli>
</xsl:template>
<xsl:template match="li">
<listitem>
<para>
<xsl:apply-templates/>
</para>
</listitem>
</xsl:template>
<xsl:template match="span">
<style type="{@style}">
<xsl:apply-templates/>
</style>
</xsl:template>
<xsl:template match="p">
<para>
<xsl:apply-templates/>
</para>
</xsl:template>
<xsl:template match="li/p">
<xsl:apply-templates/>
</xsl:template>
我遇到的问题是当ul
包含嵌套列表时,li
包含嵌套列表的文本未被<para>
元素正确覆盖。
在上面的示例中,我为嵌套列表获得的currunt输出是follwos,
<listitem><para>
List<style type="color: rgb(255,0,255);">The scope of this project is to:</style>
<oli>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested <style type="color: rgb(255,0,255);">The scope of this project is to:</style> list1</para></listitem>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested list1</para></listitem>
<listitem><para>nested list1</para></listitem>
</oli>
</para></listitem>
如此简单,而不是
<listitem><para>
List<style type="color: rgb(255,0,255);">The scope of this project is to:</style>
<oli>
........
</oli>
</para>
</listitem>
我需要,
<listitem><para>
List<style type="color: rgb(255,0,255);">The scope of this project is to:</style>
</para>
<oli>
........
</oli>
</listitem>
我试图通过text()
覆盖li
元素的<para>
内容,但后来<span>
元素没有出现在输出中。
任何人都可以建议一种方法我该怎么做..
答案 0 :(得分:1)
我只想更改模板:
<xsl:template match="li/p">
<xsl:apply-templates/>
</xsl:template>
为:
<xsl:template match="li[p]">
<listitem>
<xsl:apply-templates/>
</listitem>
</xsl:template>
此模板将与包含<li>
的{{1}}匹配。在这种情况下,您不必添加一些<p>
。对于包含某些<para>
的{{1}},其他模板将匹配,并且输出所需的<li>
。
或者,您也可以这样做:
<p>
修改模板<para>
,如下所示:
<xsl:template match="li/p">