Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RegEx删除特定的XML元素_Regex_Xml - Fatal编程技术网

RegEx删除特定的XML元素

RegEx删除特定的XML元素,regex,xml,Regex,Xml,我使用Kate处理文本以创建XML文件,但遇到了一个障碍。文本现在包含我需要根据其内容删除的其他数据 具体地说,我有一个名为的XML元素,它包含0个或更多元素,这些元素还包含其他元素,例如,等等。。虽然我可能可以在运行时使用XSL排除这些,但该文件还驱动另一个我不想触及的进程——它是Scribus的通用数据导入器,所以我不想触及编码 如果内容不是我想要的,我想做的是删除一个元素。例如,我不想要第一个VP,因此我想删除: <officer> <title>

我使用Kate处理文本以创建XML文件,但遇到了一个障碍。文本现在包含我需要根据其内容删除的其他数据

具体地说,我有一个名为的XML元素,它包含0个或更多元素,这些元素还包含其他元素,例如,等等。。虽然我可能可以在运行时使用XSL排除这些,但该文件还驱动另一个我不想触及的进程——它是Scribus的通用数据导入器,所以我不想触及编码

如果内容不是我想要的,我想做的是删除一个元素。例如,我不想要第一个VP,因此我想删除:

    <officer>
      <title>First VP</title>
      <incumbent>Joe Somebody</incumbent>
      <address>....</address>
      <address>....</address>
      ......
     </officer>
我不知道任何元素中有多少行,也不知道它们在元素中的位置

最简单的部分是我要删除的内容的开头。最难的部分是到达终点标记。到目前为止,我找到的所有解决方案都导致Kate判定正则表达式无效


任何建议都将不胜感激。

正则表达式对于这项工作来说是错误的工具;不要在没有合适的解析器的情况下处理XML,除非可能是对单个文档执行一次性工作,在运行代码并手动检查结果后,您会将代码扔掉。您可能会发现一个正则表达式可以在一个示例文档上工作,但您永远无法让它在一组精心设计的100个测试文档上正常工作

而且使用XSLT很容易做到这一点。它是一个具有两个模板规则的样式表:一个默认标识模板规则用于复制未更改的元素,另一个规则用于删除不需要的元素。事实上,在XSLT 3.0中,它变得更加简单:

<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="officer[title='First VP']"/>

正则表达式不是对XML和XML类数据进行非平凡操作的合适工具。请考虑使用适当的解析器。您是否曾经在这样的地方玩过:---d?将其设置为PCRE来测试Perl正则表达式语法并获得一些交互反馈。我不使用Perl。Perl的正则表达式不能直接翻译成Kate的。谢谢你的建议,但我不想为此使用XSL,因为这需要我学习足够多的PHP或类似的服务器端语言才能保存更新的文件。我的目标是尽可能多地使用简单的正则表达式来完成这项工作,最终编写将初始文本文件转换为我想要的XML的整个过程的脚本;但别指望木匠会给你专业的建议。我不是想开始争论,但正则表达式是处理文本的好工具。我可以从一个原始文本文件开始,将其转换成格式良好的XML。要求我现在中断我的工作流程来设置服务器,以便在最后一次相对简单的编辑中使用不同的工具,就像告诉橱柜制造商他们需要更多的车床凿子一样。我更喜欢学习我经常使用的工具,而不是学习我不太可能再次使用的新工具。谢谢你花时间提供建议,但我真的在寻找一个正则表达式解决方案;如果你的代码不起作用,我就不会生气。在你做这件事之前,好好享受吧