RegEx用于挖掘XML标记内容

时间:2015-11-19 02:44:31

标签: regex xml xpath notepad++

论坛成员, 我正在使用最新的NotePad ++。我有430个单独的XML文件,我的目标是创建一个&#34; dmcode&#34;所有430个XML文件的列表。 dmcode标识每个XML文件,看起来像下面显示的示例代码。我需要帮助开发一个正则表达式,它将获取位于<dmCode开始标记和结束/>终止符之间的dmcode标记内容。此外,我只需要将此提取仅应用于<dmIdent>标记后面的dmcode标记。换句话说,任何前面没有<dmIdent>标记的dmcode标记都不会出现在我的NotePad ++搜索结果列表中。这样的正则表达式是否可以从许多XML文件中提取目标数据?

<dmIdent> <dmCode assyCode="00" disassyCode="00" disassyCodeVariant="00" infoCode="042" infoCodeVariant="A" itemLocationCode="O" modelIdentCode="SASA" subSubSystemCode="6" subSystemCode="0" systemCode="A03" systemDiffCode="XY"/>

作为替代方案,我一直在研究使用XPath表达式来完成相同的任务。但是,我似乎无法找到一个NotePad ++ XPath插件,它允许我通过使用XPath表达式而不是正则表达式来指定我想从430 XML文件中提取的数据。如果有人能提供一个XPath表达式的例子,我将也会感激它,它将执行我试图通过使用正则表达式完成的相同任务。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我知道XPath有插件,但我不知道允许你搜索多个文件的插件。以下XPath将<dmCode>中的所有属性与根元素<dmIdent>的子项匹配:

/dmIdent/dmCode[@*]
  

我需要帮助开发一个正则表达式,它将获取位于<dmCode开始标记和结束/>终结符之间的dmcode标记内容。此外,我只需将此提取仅应用于dmCode标记后面的<dmIdent>标记。

这适用于最简单的情况,其中:

  • <dmCode><dmIdent>
  • 的第一个孩子
  • 没有任何评论,CDATA标签或类似的构造可能导致其失败。
(?i)<dmIdent>\s*<dmCode \K[^"/>]*(?>(?:"[^\\"]*(?:\\.[^\\"]*)*"|/(?!>))[^"/>]*)*(?=/>)

regex101 demo

匹配

  • (?i)<dmIdent>\s*<dmCode两个标签都用空格(不区分大小写)
  • \K重置匹配的文字
  • [^"/>]*"/>
  • 以外的任何字符
  • 和循环:
      引号中的
    • "[^\\"]*(?:\\.[^\\"]*)*"文字或
    • /(?!>) /后面没有>
    • 后跟前一个[^"/>]*
  • (?=/>)所有后跟/>