正则表达式删除XML元素名称

时间:2016-12-28 11:32:19

标签: regex xml wildcard kettle

我有一个情况。为了开发一个非常复杂的XML,我使用了“占位符”。一旦我的XML准备好了,我就需要删除那些'占位符'。

示例输入

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

示例输出

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

基本上,我正在寻找一个正则表达式,它可以通用方式删除包含“place-holder”的所有标签。 1到10之间的任何数字都可以是'place-holder'标签的后缀。

我正在努力为此提出正则表达式。

3 个答案:

答案 0 :(得分:1)

以下regex捕获所需的节点

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

捕获后,您可以用空字符串替换第一个捕获组。

答案 1 :(得分:1)

或者您可以使用:

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

你可以测试它here!

答案 2 :(得分:1)

您应该可以使用XSLT in kettle

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