2012-08-23 35 views
-1

我想从xslt1.0中的字符串中删除中断标签。我试过使用translate(s,'& ltbr>',''),其中s是字符串值,但也删除了粗体标记。也尝试过一个模板,但没有运气。 我的问题是如何只删除中断标签。如何删除<br>标签并保留所有其他标签使用xslt

因此字符串:

<b>trying</b> to remove <br> tags only <br> and not <b>bold tags</b> 

将被解析为:

<b>trying</b> to remove tags only and not <b>bold tags</b> 
+0

XSLT只能适用于(有效)XML,以及您的片段无效的XML,因为'
'没有关闭。你应该考虑一些HTML解析器的工作。 – MiMo

+0

我没有解析XML的问题。这不是问题。该字符串位于有效标签内。问题是删除返回的XML中的标签,这与例子类似。 – user900718

+1

XSLT不是处理字符串的语言 - 如果要将HTML作为字符串处理使用正则表达式,但通常不是推荐的 - 最好是解析HTML并处理解析的结果。 – MiMo

回答

0

这个XSLT:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
    "br[not(@*|*|comment()|processing-instruction()) 
    and normalize-space()='' 
    ]"/> 
</xsl:stylesheet> 

应用于此形成良好的,有效的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
<b>trying</b> to remove <br/> tags only <br/> and not <b>bold tags</b> 
</list> 

给出了这样的结果:

<list> 
<b>trying</b> to remove tags only and not <b>bold tags</b> 
</list> 

也可参考Dimitre的解决方案在这里: Removing empty tags from XML via XSLT

最好的问候, 彼得

+0

有没有办法把它变成一个模板,我可以调用删除br标签。这个xml是从Google返回的
而不是
。我希望能做一些事情,如调用模板名称=“remove_br”并传递s的xsl:值(这是提供的示例)。 – user900718

+0

我不认为你可以这样做,因为
是无效的XML。你没有可能只是将所有字符串
全部替换掉​​? – Peter

+0

java提供replaceAll()例如 – Peter

相关问题