извлечение значения атрибута в XML с помощью регулярных выражений - PullRequest
3 голосов
/ 08 февраля 2011
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE ... ]> 
<abc-config version="THIS" id="abc">
...
</abc-config>

Привет всем,

В приведенном выше коде, как извлечь значение атрибута версии с помощью Regex в Groovy / Java?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2011

Регулярное выражение для обработки этого может выглядеть примерно так:

/<\?xml version="([0-9.]+)"/

Я избавлю вас от одной из 10000 лекций о том, как не использовать регулярное выражение для анализа языков разметки.* Редактировать: Тот, чье Имя не может быть выражено на Основном Многоязычном Плане, Он заставил меня .

2 голосов
/ 08 февраля 2011

Я знаю, что вы попросили регулярное выражение, но что не так с этим в Groovy?

Предполагая, что xml-это что-то вроде:

def xml= '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE abc-config>
<abc-config version="THIS" id="abc">
  <node></node>
</abc-config>'''

Тогда я могу разобрать это:

def n = new XmlSlurper().parseText( xml )

А затем эта строка:

println n.@version

Распечатывает "ЭТО"


Если у вас проблемы с более сложным DOCTYPE, который не загружается , вы можете попробовать отключить проверку DOCTYPE одним из следующих способов:

def parser = new XmlSlurper()
parser.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false )
parser.setFeature( "http://xml.org/sax/features/namespaces", false )
parser.parseText( xml )

или с помощью конструктора для XmlSlurper, который принимает 2 параметра , чтобы отключить эту проверку

0 голосов
/ 08 февраля 2011

Не Java-регулярное выражение, Perl-регулярное выражение ...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*["'](.+?)["'][^>]*?\s*\/?>/sg

Обратите внимание, что это не работает на многих уровнях, я мог бы заполнить страницу подходящим регулярным выражением, но у меня нет желания.

это тоже не получается ...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*(".+?"|'.+?')[^>]*?\s*\/?>/sg

так же это
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*(["'])(.+?)\1[^>]*?\s*\/?>/sg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...