2016-11-24 15 views
0

私はフォーマットしたいXMLの変数を持っています。変数では、タグ付きのHTMLです。私たちのシステムではpタグが多すぎますので、<p>をすべて削除して</p>を削除したいと思います。 pタグの間にはテキストがあります。残しておきたいのは、pタグと/ pタグを削除するだけです。XSLはPタグを置き換えます

<xsl:value-of select="php:functionString('str_replace',$remove,'',normalize-space(php:functionString('html_entity_decode',description)))" /> 

私はこれを試しましたが、これは1つのpを削除し、1つを閉じるのではありません。

最適なソリューションは何ですか?

ここにテンプレート全体があります。私はそれを実装する方法: あなたの答えに感謝します。私は全く新しい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

'ダブルとテキストノードは、HTMLフラグメントを逃れdescription'ていますか?いずれにせよ、単一のユーザー定義関数を登録し、それを使って作業を行うのはなぜですか? – ThW

+0

入力の例と予想される出力を提供してください - [mcve] –

+0

入力

多くのテキストを参照してください。

多くのテキスト2

期待: 多くのテキスト。 多くのテキスト2 – LarkoJr

答えて

0

次のソリューションに問題があります:

<xsl:template match="p"> 
    <xsl:apply-templates /> 
</xsl:template> 

のような、例えば、あなたはp - タグにマッチしますし、唯一の自分の子ノードを処理しますテキストとタグ。

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> 
関連する問題