我有一个包含多个元素的 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
。
此类任务是为 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>