XSL替换P标签

时间:2016-11-24 13:51:57

标签: php xml xslt replace

我有一个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>

2 个答案:

答案 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>