Как обработать различные диалекты регулярных выражений (Java по сравнению с xsd)?

Когда я пытаюсь проверить XML-файл против XSD в Java (см. этот пример) существуют некоторые несовместимости между регулярными выражениями, данными в файле XSD и регулярных выражениях в Java.

Если существует регулярное выражение как "[ab-]" в XSD (значение любого из символов, "b" или "-", Java жалуется на синтаксическую ошибку в выражении.

Это - известная ошибка начиная с 28-MAR-2005, посмотрите базу данных ошибки Sun.

Что я могу сделать для работы вокруг этой ошибки? До сих пор я пытаюсь "исправить" файл XSD путем замены "[ab-]" "[ab\-]", но иногда это не опция.


Если у Вас есть проблемы с этой ошибкой, также голосуйте за нее в базе данных ошибки Sun!

9
задан Community 23 May 2017 в 00:32
поделиться

2 ответа

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

Если вы сможете предварительно получить поток XSD включен, то вы можете создать анализатор, который понимает базовую структуру регулярных выражений и может исправить все, что выглядит как форма [. * -] (где .star не буквальный в этом случае).

3
ответ дан 3 November 2019 в 08:20
поделиться

Несмотря на то, что в мире может быть не лучшим решением, вы можете рассмотреть возможность использования SAX Parser. Я использовал его уже более 3 лет, однако я не сделал много валидации на регеекс с ним, поэтому я не могу говорить с этим, связанная с этим.

Кроме того, я думаю, что Kaleb, вероятно, верна на стороне предварительной обработки (что является чем-то идеальным) - вы можете использовать Regex для любого из входящих регеектов, чтобы сделать замену ... хотя Это имеет вполне кодовый запах об этом.

Редактировать: Дополнительная мысль, которая только что приехала ко мне. Если Regex не нужно быть в XSD - то есть. Это просто потому, что это было «простым» в прошлом - вы можете сделать проверку REGEX вне XSD. Но, если другие системы используют XSD, что, вероятно, не правильное решение, и вы можете забыть, что я сказал что-нибудь.

0
ответ дан 3 November 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: