0

現在、出力から空のPタグを削除しようとしているXSLT2.0スタイルシートがあります。次の正規表現を試しましたが、成功しませんでした。

replace($string,"<p>[\s{2,}]*</p>","")

現在のスタイルシートからの出力は次のようになります。

<p>Some Text!</p>
<p></p>
<p>Some Text!</p>
<p> </p>
<p>  </p>
<p>Some Text!</p>

これから、1つ以上のスペースが含まれているPタグを出力で削除する必要があるため、次のようになります。

<p>Some Text!</p>
<p>Some Text!</p>
<p>Some Text!</p>

ありがとう

:-)

4

2 に答える 2

2

最初のスタイルシートの結果を処理するXSLTスタイルシートを作成します。必要なテンプレートは2つだけです。

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

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

<xsl:template match="p[not(*) and not(normalize-space())]"/>

</xsl:stylesheet>

もちろん、別の方法として、元のスタイルシートを書き直して空のp要素をまったく生成しないようにすることもできますが、そのためには、XML入力とXSLTの詳細を確認する必要があります。

于 2012-07-06T10:09:32.130 に答える
0

次の正規表現を使用することをお勧めします。/<p>(|\s+)<\/p>/

説明:

<p>       # Match <p>
(         # Try to match...
  |\s+    #   nothing or the space character any number of times
)         # ...match end
<\/p>     # Match </p>

リンクhttp://regexr.com?31f6aで実際の動作を確認できます(必ず「置換」モードに切り替えて、置換テキストを何も設定しないでください)。

アップデート

実際には、(|\s)式と\s*は同じことを行うので(Rawlingのおかげで)、メインの式を。として書くことができます/<p>\s*<\/p>/

于 2012-07-06T07:59:44.913 に答える