Один должны действительно попытаться собрать много причин, почему с помощью регулярного выражения является недостаточным для получения чего-либо из надежно из файла XML, даже если это «что-то» просто ничтожный атрибут, например, path
и его (строковое) значение. Простой шаблон, такой как "path=\"(.*?)\""
, обречен на провал из-за наименьшего количества свободы, которое спецификация XML оставляет для написания юридического XML и многое другое.
- Пробег, включая разрывы строк, может происходить до и после знака равенства.
- Апоптопы могут использоваться вместо кавычек.
- Любой символ может быть записан как числовой или именованный объект.
- Строка может быть частью значения элемента или атрибута.
- Строка может встречаться в комментарии XML.
- XML-файл может быть записан в кодировке, которая не учитывает наивное чтение в текстовом файле ванили; поэтому данные могут быть мусором.
Итак, для записи: Я настоятельно рекомендую использовать преобразование XSLT для извлечения желаемых значений атрибута. Для этого требуется очень простой шаблон. Использование анализатора XML требует больше строк кодов, но оно одинаково надежно.
И вот код Java, который я категорически не рекомендую использовать, он просто охватывает два из упомянутых выше пунктов.
String theText = ...;
String pattern = "\\bpath\\s*=\\s*(\"(.*?)\"|'(.*?)')";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(theText);
while (m.find()) {
System.out.println(m.group(1).trim());
}
(А вы заметили границу слова предшествующей path
? Просто еще один шанс пойти не так с этим подходом.)
Вы читаете XML-файл? – Tunaki
Да. Я читаю XML-файл – Favolas
Затем используйте синтаксический анализатор XML. Сделайте вашу жизнь легкой. – Tunaki