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

Regular expression to delete XML element names

我有个情况。为了开发一个相当复杂的 XML,我使用了 "place-holders"。一旦我的 XML 准备就绪,我需要删除那些 'place-holders'.

示例输入

<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' 标记的后缀。

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

以下regex抓取到想要的节点

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

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

或者您可以使用:

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

你可以测试一下here!

您应该可以使用 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