2013-06-03 56 views
1

我正在使用xslt来清理由编辑器生成的html代码。XSLT递归html清理

的代码包含以下结构:

<span name="x">1<b>test text</b> 
    <span name="y">2</span> 
</span> 
<span name="y">3 
    <span name="y">4</span> 
    <span name="x">1</span> 
</span> 
<span name="y">5<i>test</i> 
    <span name="y"><u>6</u>7</span> 
</span> 

的事情是,XSLT需要保存的HTML结构。并需要完成2个操作。 如果它找到名称为x的跨度。它需要删除它。 (这不是问题)

但是,当它发现y不在x内部时。它需要获取子节点(值为node()),并将它们放在输出中。子节点需要检查其他跨度。

答:我确实有一些xslt可以找到第一级跨度(数字1和3)。但它复制内部html,并不适用于innerHTML的模板。

有没有人有这个问题,或知道一个解决方案?

编辑:如上所述需要输出。

345<i>test</i><u>6</u>7 

EDIT2:XSLT

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="span[@name='x']"> 
//This deletes the node.. But only one level? 
</xsl:template> 
<xsl:template match="span[@name='y']"> 
//This needs to play all templates again to remove or get inner nodes() see case x & y 
</xsl:template> 
+1

请注意。分享您生成的XSLT和所需的输出。 –

+1

查看我在文章中的编辑 – spons

+3

如果您在 template –

回答

1

你只需要包括应用模板在最后一个模板,从而获得所需的输出。