2016-12-28 28 views
0

私は状況があります。非常に複雑なXMLを開発するために、私は「プレースホルダ」を使用しました。私のXMLが準備できたら、それらの「プレースホルダー」を削除する必要があります。XML要素名を削除する正規表現

<consumers> 
    <consumer> 
    <val>1</val> 
    </consumer> 
    <consumer-info> 
    <val>2</val> 
    </consumer-info> 
</consumers> 

サンプル入力

<consumers> 
    <place-holder_1> 
    <consumer> 
     <val>1</val> 
    </consumer> 
    </place-holder_1> 
    <place-holder_2> 
    <consumer-info> 
     <val>2</val> 
    </consumer-info> 
    </place-holder_2> 
</consumers> 

サンプル出力は基本的に、私は一般的な中で、「プレースホルダ」と何かを含むすべてのタグを削除することができます正規表現を探しています方法。 1〜10の任意の数字は、「プレースホルダー」タグの接尾辞にすることができます。

私はこのために正規表現を思いつくのに苦労しています。

答えて

1

regexを所望ノード一度撮影し

^\s*<\/?place-holder_\d{1,2}>

をキャプチャし、あなたは空の文字列との最初のキャプチャグループを置き換えることができます。

+0

@cincount。ありがとうございますが、 valは削除されません。すべて正常に動作します。私は「?」を追加しようとしています。 '_'の後にそれをオプションにするが無駄にする。 –

+0

@CinCount私の間違い。 regexがの値を削除しなければならないということを忘れてしまいました。私は「?」を追加しようとしています。 '_'の後には使用できません。 –

+0

@vikas私はあなたが私の答えを受け入れたことを知ります。あなたが上記のコメントで言及したケースのためにあなたのために働いたのですか? – CinCout

1

またはあなたが使用することができます。

(?=(<\/?place-holder_(10|\d)>)) 

あなたがXSLT in kettleを使用することができるはずhere!

1

それをテストすることができます。

XSLT 1.0

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

    <!--Identity Transform (https://www.w3.org/TR/xslt#copying)--> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*[starts-with(local-name(),'place-holder')]"> 
    <xsl:apply-templates/> 
    </xsl:template> 

</xsl:stylesheet> 

Working Example

関連する問題