RegEx/XPath 以匹配 XML 中的某些 Adobe LiveCycle Designer 字段
RegEx/XPath to match certain Adobe LiveCycle Designer fields in XML
我正在使用以下 RegEx 匹配 Adobe 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 倍。
塔雷克
我正在使用以下 RegEx 匹配 Adobe 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 倍。
塔雷克