通过文本编辑器删除XML节点,包括子节点(如果存在)

时间:2016-01-25 03:43:11

标签: xml notepad++

我想在记事本++(或其他FOSS文本编辑器)中完全删除一个标记/节点(包括儿童),这些标记/节点可能/可能没有孩子,可能还有孙子等等...我已经尝试了正则表达式(在其他一些SO问题上注明)但是这些节点/标签的多线方面有问题。

<exampleTag id="blah" name="bob">
    <childTag possible="element" />
    <moreChildren>
        <evenAnotherLevel />
    </moreChildren>
</exampleTag>

有趣的是textWrangler和notepad ++都可以折叠节点以便于阅读:

enter image description here

这样可以轻松地手动删除整个内容,但这对于可能有10000或更多这些标记的文件不起作用。有没有可以做到这一点的工具/插件?现在我打破node.js来完成这项工作,但这不是一个非专业人士的解决方案。

2 个答案:

答案 0 :(得分:0)

您可以直接从Notepad ++使用XSLT转换。因此,您需要删除内部具有所有内部XML的特定节点。这是您可以使用或根据您的需求调整的模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="exampleTag"/> <!-- The tags we want to remove are here -->
</xsl:stylesheet>

现在,将其另存为磁盘上的* .xslt文件。然后,在Notepad ++中打开XML并转到插件 - &gt; XML工具 - &gt; XSL转换。提供XSLT文件的路径:

enter image description here

然后点击转换

答案 1 :(得分:0)

在BBEdit,TextWrangler和其他使用PCRE(Perl兼容正则表达式)的文本编辑器上,您可以设置“Magic Dot”选项(允许匹配\ r和\ n),方法是放在你的前面搜索(?s)

另外,在查找关闭的XML标记时,请务必使用非贪婪的搜索?之后的任何模式,如。*,否则可以匹配结束标记。

例如,在TextWrangler中,您可以搜索

(?s)^    <exampleTag code="[0-9]*" name="[0-9]* - .*?</exampleTag>$.

并替换为零。这将找到每个&lt; exampleTag在带有数字代码的换行符之后开始4个空格并且具有包含数字序列的名称 - 任何(非贪婪的)直到结束&lt; / exampleTag&gt;然后换行。决赛。最后确保新行也将被删除。 (在Windows上,你可能需要两个点来表示cr-lf。)