如何过滤 XML 文件以查找具有任何无效值的所有标签类型?

如何过滤 XML 文件以查找具有任何无效值的所有标签类型?

我一直在使用 notepad++,但似乎找到了一种简单的方法来做到这一点。我认为 grep 可能有效,但我不太确定如何操作。

我有一个文件,其中包含某些标签,我想找到所有具有错误值的标签。例如:

大多数都是这样的。

<tag attr="1">Correct</tag>

但是,我想找到所有包含其他内容的内容。

<tag attr="1">Wrong</tag>
<tag attr="1">Incorrect</tag>
<tag attr="1">Gibberish</tag>

...等等,等等...

有成千上万个这样的标签,但我只想找出不好的标签。我不想手动查看每一个标签。此外,同一行上可以有多个标签。

GC

答案1

最好使用 XML 解析器,但是,如果您想使用 Notepad++,可以使用以下命令:

  • Ctrl+F
  • 找什么:<tag[^>]*>(?:(?!Correct|</tag>).)*</tag>
  • 查看 相符
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Find All in Current Document

解释:

<tag[^>]*>          # open tag
            # Tempered Greedy Token
(?:                 # non capture group
    (?!                 # negative lookahead, make sure we haven't after:
        Correct             # literally Correct
      |                   # OR
        </tag>              # end tag
    )                   # end lookahead
    .                   # any character
)*                  # end group, may appear 0 or more times
</tag>              # end tag

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案2

使用 CTRL H(查找/替换)并打开 REGEX。点是单个通配符,.* 是所有通配符。如果您想使用换行符,\r\n 或 \n 也是您的好帮手。什么定义了正确的标签内容?它总是一个单词,还是长度?

例如,....g 是表示任何标签属性 1 的正则表达式,其内容为 4 个字符和一个 g。

其次,\r\n....g 是相同的正则表达式,但在开始标记之后和标记内容之前有一个新行。更多详细信息将有助于确定 n++ 的确切正则表达式,因此如果需要,请发送更多详细信息。

您还可以执行 ()(....g)() 来解析这三个部分。$1 等是如何解决已解析部分的问题。$1$2$3 是文字回贴。

答案3

找到一个允许 XPath 搜索的 XML 编辑器(我使用 oXygen),然后查询//tag[not(.='Correct')]

如果您要使用 XML 进行任何操作,则需要掌握 XPath:使用正则表达式来处理 XML 效率低、笨拙,并且最终会给出错误的答案 - 总会有某种编写 XML 的方式使您的正则表达式失效。例如,使用正则表达式执行此操作的人经常会忘记属性可以用单引号而不是双引号分隔,或者换行符可以出现在开始标记中的“>”之前。

相关内容