RegEx / XPath для соответствия определенным полям Adobe LiveCycle Designer в XML - PullRequest
0 голосов
/ 01 февраля 2019

Я использую следующие RegEx для сопоставления <field> элементов в представлении XML формы XFA Adobe LiveCycle Designer.

Проверьте RegEx (?i)<(field)[\s\S]*?<\/\1> и образец XML здесь: https://regex101.com/r/80gkRp/1

Вышеупомянутый RegEx работает нормально, и я мог бы играть с ним довольно хорошо.Однако я испытываю трудности с ограничением совпадений для определенных типов элементов.

Предположим, например, что я хочу сопоставить определенные элементы поля, которые имеют атрибут presence="hidden" и должны иметь внутренний элемент button, и<bind> элемент с атрибутом match должен равняться 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>``

Пожалуйста, дайте мне решение как можно ближе, и не нужно удовлетворятьвышеупомянутые сложные критерии, в аренду, чтобы иметь возможность соответствовать полю, которое является кнопкой.

Tarek

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Благодаря Кириллу Полищуку он привел меня к ответу.

Цель этого - получить список имен полей, которые можно заполнить, чтобы мы могли зарегистрировать их в базе данных.Для этого нам нужно сгенерировать операторы INSERT SQL.У нас уже есть шаблон Excel для этой цели, и нам нужны только имена полей.

Поэтому я использовал https://codebeautify.org/Xpath-Tester и приведенное ниже выражение XPath, чтобы получить список имен полей:

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

Затем я могу просто проанализировать вывод в Notepad ++, чтобы получить только имя, по одному полю в каждой строке.

Это в 100 раз проще, чем использовать RegEx.

Тарек

0 голосов
/ 01 февраля 2019

Regex определенно не лучший вариант для запроса XML.Мое предложение состоит в том, чтобы использовать какие-то инструменты / структуры / механизмы, связанные с XML.XPath является одним из них.В вашем случае запрос XPath для получения field элементов с соответствующими элементами-потомками будет:

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