Java 包含回车符(&;#13)时模式的XSD验证问题
我必须检查大型XML文件中URL的有效性 我必须使用此模式检查URL是否有效:Java 包含回车符(&;#13)时模式的XSD验证问题,java,xml,design-patterns,xsd-validation,carriage-return,Java,Xml,Design Patterns,Xsd Validation,Carriage Return,我必须检查大型XML文件中URL的有效性 我必须使用此模式检查URL是否有效: <xs:simpleType name="url"> <xs:restriction base="xs:string"> <xs:pattern value="https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?((/|\?
<xs:simpleType name="url">
<xs:restriction base="xs:string">
<xs:pattern value="https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?((/|\?).*)?"/>
</xs:restriction>
</xs:simpleType>
(注意:NamespaceFilter只是一个扩展XMLFilterImpl的类,以避免检查XML文件的命名空间)
不幸的是,在XML文件中,有些URL带有字符“
;”,表示回车:
包含nannoyingcarriend返回
当我使用包含此类URL的XML文件运行代码时,会出现以下错误:
org.xml.sax.SAXParseException; lineNumber: 238719; columnNumber: 129; cvc-pattern-valid: Value 'http://xxx.yyy.zz/exampleofurl
containinganannoyingcarriagereturn' is not facet-valid with respect to pattern 'https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?((/|\?).*)?' for type 'url'.
XSD验证器似乎将“
;”解释为回车符,并在应用该模式时导致此问题
有没有办法强制验证器不解释这个ASCII码
在我看来,URL是有效的,并且符合模式。您使用一个包含五个字符序列的字符串测试了正则表达式代码>,这是可以接受的,因为这五个字符中的每一个都与元字符“”匹配 但是在XML中,五个字符的序列
代码>表示单个字符,代码点13。这是元字符“.”不匹配的两个字符之一(另一个是代码点10)
你问“有没有办法强迫验证器不解释这个ASCII码?”答案是否定的。XSD验证总是对解析的XML进行操作,XML解析会扩展实体引用。我不明白。字符串包含模式不允许的字符。什么使你认为它是有效的?这个例子使我认为它应该是有效的。但也许我错了。
org.xml.sax.SAXParseException; lineNumber: 238719; columnNumber: 129; cvc-pattern-valid: Value 'http://xxx.yyy.zz/exampleofurl
containinganannoyingcarriagereturn' is not facet-valid with respect to pattern 'https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?((/|\?).*)?' for type 'url'.