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