我已经使用了搜索功能,但我没有找到问题的答案。
我有一个类似于以下(示例)的XML结构:
<Task name="1B">
<Person type ="XX" name="YY" height="ZZ"/>
<Person type ="XX" name="YY" height="ZZ"/>
<Person type ="XX" name="YY" height="ZZ"/>
</Task>
<Task name="1C">
<Person type ="XX" name="YY" height="ZZ"/>
<Person type ="XX" name="YY" height="ZZ"/>
<Person type ="XX" name="YY" height="ZZ"/>
</Task>
现在我想通过Notepad ++删除带有Name&#34; 1B&#34;的标签。以及打开和结束标记之间的所有标记。记事本有办法吗?我已经尝试过使用RegEx Pattern,但我没有找到正确的方法。
答案 0 :(得分:1)
强烈建议不要使用带有HTML的正则表达式,因为这会导致许多问题和不必要的问题。见RegEx match open tags except XHTML self-contained tags。 使用XSLT转换XML是您真正需要的工具。
创建一个带有remove_xml_tag.xsl
样本名称的UTF8编码文件并将其粘贴到其中:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Task[@name='1B']"/>
</xsl:stylesheet>
XSL处理每个节点和属性(node()|@*
),当它遇到Task
元素且name
属性等于1B
("Task[@name='1B']"
)时只是不把它写入输出。
然后运行 XML工具插件 - &gt; XSL转换。你会看到:
单击右侧的 ... 按钮,浏览XSL文件。
单击转换按钮。
如果您的XML格式错误,只有在没有嵌套的Task
节点时才能使用的回退解决方案:
<Task\s+name="1B">[^<]*(?:<(?!/Task>)[^<]*)*</Task>