Regex для проверки XML, если он правильно сформирован - PullRequest
1 голос
/ 18 ноября 2009

Существует ли регулярное выражение для проверки правильности формирования xml?

Спасибо

Редактировать: Если не регулярное выражение, то есть хороший метод синтаксического анализа, который я могу использовать в C #, который не выдает исключение. Я пытался использовать xmlReader, но он не работал для меня.

Ответы [ 9 ]

7 голосов
/ 18 ноября 2009

Это хорошо за пределами возможностей регулярных выражений. Другими словами, ответ в том, что это невозможно.

РЕДАКТИРОВАТЬ: Есть много инструментов, доступных для проверки правильности, но все они включают в себя своего рода анализатор / валидатор XML. Если вы предоставите больше информации о вашем окружении, возможно, мы сможем указать вам правильное направление.

6 голосов
/ 18 ноября 2009

Нет.

Синтаксис XML является нерегулярным, чтобы вызвать кошмары от регулярных выражений.

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

Синтаксис XML достаточно сложен, и вы не можете безопасно проанализировать его с помощью регулярного выражения. Это выглядит просто и регулярно, но есть много возможностей для возникновения проблем. Один неприятный раздел CDATA и все становится очень сложно И рассмотрите RSS-каналы, в которые вы встраиваете HTML в XML.

Поэтому, пожалуйста, используйте для этого библиотеку разбора XML. Их много.

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

2 голосов
/ 18 ноября 2009

Если не регулярное выражение, то есть хороший метод синтаксического анализа, который я могу использовать в C #, который не вызывает исключение. Я пытался использовать xmlReader, но он не работал для меня.

Использование XmlReader и while(reader.Read()) {} (перехват любых исключений), вероятно, является самым быстрым чисто управляемым подходом.

2 голосов
/ 18 ноября 2009

Не существует решения для регулярных выражений, , потому что Джефф сказал мне об этом.

1 голос
/ 18 ноября 2009

Нет, если рекурсивные регулярные выражения не рассматриваются. Регулярные выражения не могут проверить произвольность вложенности. Однако некоторые движки регулярных выражений принимают рекурсивные регулярные выражения, которые вы можете попробовать использовать для этой цели.

1 голос
/ 18 ноября 2009

Используйте взамен XML-валидатор .

1 голос
/ 18 ноября 2009

Нет, нет. (Практически и для общего случая, по крайней мере.) Используйте проверяющий синтаксический анализатор, если вы хотите определить, правильно ли сформирован XML.

0 голосов
/ 18 ноября 2009

Я делаю предположение здесь. Вы думаете, что использование библиотеки будет слишком медленным или слишком тяжелым, чтобы делать это быстро и / или эффективно.

Если этот равен , проверьте его. Попробуйте несколько библиотек, посмотрите, насколько они большие, посмотрите, насколько они быстрые.

0 голосов
/ 18 ноября 2009

последние версии PCRE имеют всевозможные функции, которые делают это достижимым, но код будет чертовски уродливым. libxml2 поставляется с xmllint, почему бы не использовать правильный инструмент для работы?

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