我正在使用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()
),并将它们放在输出中。需要检查子节点是否有任何其他跨度。
A.t.m我确实有一些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>
答案 0 :(得分:1)
您只需在最后一个模板中包含apply-templates即可获得所需的输出。