我有一个XML格式的变量,我想格式化。在变量中,它带有标签的HTML。我们的系统会生成太多p标签,因此我想删除所有<p>
并关闭</p>
。 p标签之间有文字,我想保留,只需删除p和/ p标签。
<xsl:value-of select="php:functionString('str_replace',$remove,'',normalize-space(php:functionString('html_entity_decode',description)))" />
我已经尝试过这个,但这只是删除一个p而不是关闭一个。
什么是最佳解决方案?
这是整个模板。我如何实现它: 谢谢您的回答。我是XSL的新手,我没有设法让它工作。这是我的代码部分。我想从变量描述中删除p标记。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" exclude-result-prefixes="php">
<xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<products>
<xsl:for-each select="objects/object">
<xsl:element name="name"><xsl:value-of select="name"/></xsl:element>
<xsl:element name="url"><xsl:value-of select="product_url"/></xsl:element>
<xsl:element name="description"><xsl:value-of select="description"/> </xsl:element>
</products>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
以下解决方案是否存在问题:
<xsl:template match="p">
<xsl:apply-templates />
</xsl:template>
因此,您将匹配p
- 标记,并且只会处理其子节点,例如文字和标签。
答案 1 :(得分:0)
以这种方式覆盖 身份规则 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p"><xsl:apply-templates/></xsl:template>
</xsl:stylesheet>