![](/img/trans.png)
[英]Regex in Notepad++ to select on string length between specific XML tags
[英]Delete tags between specific tags in XML (Notepad++)
我已经使用了搜索功能,但没有找到问题的答案。
我有一个类似下面的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 ++删除名称为“ 1B”的标签以及打开和关闭标签之间的所有标签。 记事本中有办法吗? 我已经尝试过RegEx Pattern,但没有找到正确的方法。
强烈建议不要将regex与HTML一起使用,因为这会导致许多问题和不必要的问题。 请参阅RegEx匹配开放标签,XHTML自包含标签除外 。 使用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()|@*
),并且遇到name
属性等于1B
的Task
元素( "Task[@name='1B']"
)时,它不会将其写入输出中。
然后运行XML Tools插件-> XSL Transformation 。 你会看见:
单击右侧的...按钮,然后浏览XSL文件。
单击变换按钮。
一个后备解决方案,以防您拥有格式错误的XML,该格式仅在没有嵌套的Task
节点时才有效:
<Task\s+name="1B">[^<]*(?:<(?!/Task>)[^<]*)*</Task>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.