使用XSLT转换XML数据
我的分数如下使用XSLT转换XML数据,xslt,Xslt,我的分数如下 <ul> <li>this is bullet list</li> <li>this is another bullet</li> <ul> <li>this is embaded</li> <li>this
<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>
这是子弹清单
这是另一颗子弹
这是大使馆
这是大使馆
这是弗图尔酒店
基本上,所有嵌套项都应该出现在最后一个节点标记中。任何提示都将不胜感激。例如
<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>
如果您想支持更复杂的输入,请使用单独的模式将
拉到前面的
谢谢Jelovirt,我刚刚又提出了一个senerio,在Embeddead元素中使用OL而不是ul。?如何抓住这一点和过程?如何处理OL和OL或组合。我的标记是使用freetextbox html编辑器生成的,因此在某些浏览器中,标记是生成为OL,UL,LI,其中一些浏览器是生成为OL,UL,LI?有什么办法可以消除这种情况的敏感性吗?@atif:最简单的方法是将li
改为li
,等等,并将以下兄弟姐妹::*[1]/self::ul
改为以下兄弟姐妹::*[1][self::ul或self::ul]
,谢谢Jelovirt,我刚刚想出了一个新的senerio,我用OL代替了。遗憾的是,我担心在您完整地陈述您的需求之前,您会提出更多的场景。我建议您在尝试编写代码(或要求他人为您编写代码)之前,花一些精力更精确地定义需求。