如何在 VS Code 中使用正则表达式删除 XML 文件中的重复元素?

问题描述 投票:0回答:1

我有一个包含多个元素的 XML 文件,并且

item
的每个子元素出现两次。该文件看起来像这样:

<item>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
</item>

我想从根中删除具有属性

name
的重复元素。

我尝试使用正则表达式选项进行 VS Code 查找和替换。我在查找字段中输入了

(<item name=".*">#...</item>)(\s*\2)
,在替换字段中输入了
$1

regex xml visual-studio-code tags
1个回答
0
投票

此类任务是为 XSLT 设计的。

输入XML

<item>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
</item>

XSLT 1.0

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

    <xsl:key name="uniqueArray" match="array" use="@name"/>

    <xsl:template match="/item">
        <xsl:copy>
            <xsl:for-each select="array[count(. | key('uniqueArray',@name)[1]) = 1]">
                <xsl:copy-of select="."/>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

输出XML

<item>
  <array name="time_entries">
    <item>0</item>
    <item>10</item>
  </array>
  <array name="game_level">
    <item>0</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
  </array>
</item>
© www.soinside.com 2019 - 2024. All rights reserved.