Я пытаюсь проверить элемент XML с проверкой шаблона XSD, используя приведенный ниже шаблон, и он не работает. Требуемое поведение — разрешить все символы, кроме упомянутых в выражении шаблона.
<xsd:pattern value = "^[^><{}|^`\[\]\\\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
Но приведенный выше шаблон дает ошибку проверки для действительных данных (ТЕСТИРОВАНИЕ) также в XSD, но то же самое работает нормально, если я использую этот шаблон в пакете сопоставления выражений java regualr. Пожалуйста помоги.
@TimBiegeleisen Вы не можете использовать литералы < и > в XML. Вместо этого нужно использовать сущности.
@RobbyCornelissen Хорошо ... но действителен ли этот класс персонажей? Я никогда не видел разновидность регулярных выражений, которая позволяет использовать несколько символов.
@TimBiegeleisen Этот класс символов действителен и будет работать по назначению. Проблема с якорями ^ и $.
Каждый день узнаю что-то новое ^^. Таким образом, синтаксический анализатор, вероятно, преобразует > в > внутри для использования в классе.




В отличие от множества комментариев и ответов на этот вопрос, такие объекты, как > и <, можно без проблем использовать в регулярных выражениях схемы XML.
Однако такие привязки, как знак вставки (^) и доллар ($), не поддерживаются.
Учитывая следующую схему с удаленными якорями из шаблона:
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
<xsd:element name = "test" type = "test"/>
<xsd:simpleType name = "test">
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "[^><{}|^`\[\]\\\\]*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Это будет правильно проверено:
<test>testing</test>
Пока таких не будет:
<test>{testing</test>
<test>>testing</test>
Ваш класс персонажа, возможно, недействителен или, по крайней мере, не делает то, что вы думаете.
[>]означает совпадение с любым из&,g,t,;. Это не означает совпадение с символом HTML>.