RegEx/XPath 以匹配 XML 中的某些 Adob​​e LiveCycle Designer 字段

RegEx/XPath to match certain Adobe LiveCycle Designer fields in XML

我正在使用以下 RegEx 匹配 Adob​​e LiveCycle Designer XFA 表单 XML 视图中的 <field> 元素。

检查 RegEx (?i)<(field)[\s\S]*?<\/> 并在此处示例 XML:https://regex101.com/r/80gkRp/1

上面的 RegEx 运行良好,我可以很好地使用它。但是,我发现很难限制某些元素类型的匹配。

假设,例如,我想匹配某些具有属性 presence="hidden" 并且必须具有内部 button 元素和具有属性 [=18] 的 <bind> 元素的字段元素=]必须等于none(即bind match='none'必须存在),如下:

<field bla bla bla name="First_Name" presence="hidden" bla bla bla>
  ... bla bla
  <ui>
    <button bla bla bla/>
  </ui>
  ...
  <bind match="none"/>
  ...
</field>``

请尽可能给我解决方案,不需要满足以上复杂的条件,至少能够匹配按钮的字段。

塔雷克

正则表达式绝对不是查询 XML 的最佳选择。我的建议是使用某种 XML 相关的 tools/frameworks/mechanisms。 XPath 就是其中之一。在您的情况下,获取具有相应后代元素的 field 元素的 XPath 查询将是:

//field[@presence = "hidden" and .//button and .//bind[@match = "none"]]

感谢 Kirill Polishchuk,他带领我找到了答案。

这里的objective是获取字段名称的列表,这些字段是可填写的字段,以便我们可以将它们注册到数据库中。为此,我们需要生成 INSERT SQL 语句。为此,我们已经有了 Excel 模板,我们只需要字段名称。

所以我使用 https://codebeautify.org/Xpath-Tester 和下面的 XPath 表达式来获取字段名称列表:

(/subform/field[not(.//button)]|/subform/exclGroup)/@name

然后,我可以简单地解析 Notepad++ 中的输出,只得到名称,每行一个字段。

这比使用 RegEx 简单 100 倍。

塔雷克