【问题标题】:Regular expression to delete XML element names删除 XML 元素名称的正则表达式
【发布时间】:2016-12-28 11:32:19
【问题描述】:

我有一个情况。为了开发一个相当复杂的 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>

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

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

【问题讨论】:

    标签: regex xml wildcard kettle


    【解决方案1】:

    下面的regex捕获了想要的节点

    ^\s*&lt;\/?place-holder_\d{1,2}&gt;

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

    【讨论】:

    • @cincount。谢谢,但它不会删除 val。休息一切正常。我正在尝试添加“?”在“_”之后使其成为可选但无济于事。
    • @CinCount 我的错误。我忘了提到正则表达式还必须删除 value,如果它发生的话。我正在尝试添加“?”在'_'之后但无济于事。
    • @vikas 我看到你已经接受了我的回答。对于您在上面评论中提到的案例,它对您有用吗?
    • @CinCount..稍作改动就可以了..
    【解决方案2】:

    或者你可以使用:

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

    你可以测试一下here!

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-05
        • 2013-08-14
        • 2013-02-08
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多