lxml XSD处理报告空字符串与它应该匹配的正则表达式不匹配。为什么?
我正在尝试使用Python中的lxml验证给定xsd文件的文档:lxml XSD处理报告空字符串与它应该匹配的正则表达式不匹配。为什么?,xml,regex,xsd,lxml,Xml,Regex,Xsd,Lxml,我正在尝试使用Python中的lxml验证给定xsd文件的文档: from lxml import etree xmlschema_doc = etree.parse('somefile.xsd') xmlschema = etree.XMLSchema(xmlschema_doc) xml_doc = etree.parse('somefile.xml') xmlschema.assertValid(xml_doc) 我得到一个错误: lxml.etree.DocumentInvalid
from lxml import etree
xmlschema_doc = etree.parse('somefile.xsd')
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse('somefile.xml')
xmlschema.assertValid(xml_doc)
我得到一个错误:
lxml.etree.DocumentInvalid: Element 'someelement': [facet 'pattern'] The value '' is not accepted by the pattern '\s*.{0,10}\s*'., line 24
第24行是:
<someelement></somelement>
在我的XSD文件中指定如下:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:simpleType name="someelement">
<xs:restriction base="xs:string">
<xs:pattern value="\s*.{0,10}\s*"/>
</xs:restriction>
</xs:simpleType>
...
奇怪的是,空字符串对于模式\s*{0,10}\s*
你有什么解释吗
编辑:添加someelement的XSD定义并删除对python的引用。XSD是python的一个独立标准。XSD文件中的模式需要符合XSD语法
XSD正则表达式的官方定义如下:XSD是python的独立标准。XSD文件中的模式需要符合XSD语法
XSD正则表达式的官方定义如下:在正则表达式中,删除\s使其看起来像
<xs:pattern value="*.{0,10}*"/>
我用过
<xsd:pattern value="(Pattern|.{0})"/>
以匹配图案或空白 在正则表达式中,删除\s,使其看起来像
<xs:pattern value="*.{0,10}*"/>
我用过
<xsd:pattern value="(Pattern|.{0})"/>
以匹配图案或空白 那么它应该是什么样子呢?@TimPietzcker:“应该符合XSD语法”的哪一部分还不清楚?我不会为这家伙写代码。根据你链接的页面,这个正则表达式应该是完全有效的XSD正则表达式。你的回答不是很有帮助。@Thomas:可能是的,但我不认为这是你的第一个电话。也许…找到处理XSD正则表达式或XSD的其他东西,并尝试使用它。或者,如果你想让别人帮你,你甚至可以发布你的XSD。。你想要什么?那么它应该是什么样子?@TimPietzcker:“应该符合XSD语法”的哪一部分还不清楚?我不会为这家伙写代码。根据你链接的页面,这个正则表达式应该是完全有效的XSD正则表达式。你的回答不是很有帮助。@Thomas:可能是的,但我不认为这是你的第一个电话。也许…找到处理XSD正则表达式或XSD的其他东西,并尝试使用它。或者,如果你想让别人帮你,你甚至可以发布你的XSD。。你想要什么?顺便说一句(但这可能不是错误的根源),如果正则表达式包含反斜杠,您应该始终使用原始字符串
\s
碰巧可以工作,但例如\b
将失败(因为它将被解释为一个退格字符,而不是一个单词边界)。如果您需要我告诉您的帮助以外的帮助,您可能应该显示XSD。另外,请尝试[\s]*。{0,10}[\s]*
Marcin:XSD文件是由我需要与之通信的第三方提供给我的,同时还有一个XML文件示例,它应该验证(但没有验证)。我不能公开这些文件,这就是为什么我只复制了有趣的部分。对于您的模式,我仍然会遇到相同的错误:模式“[\s]*”不接受值“”。{0,10}[\s]*”在这里发现了类似的问题:顺便说一句(但这可能不是错误的根源),如果正则表达式包含反斜杠,您应该始终使用原始字符串\s
碰巧可以工作,但例如\b
将失败(因为它将被解释为一个退格字符,而不是一个单词边界)。如果您需要我告诉您的帮助以外的帮助,您可能应该显示XSD。另外,请尝试[\s]*。{0,10}[\s]*
Marcin:XSD文件是由我需要与之通信的第三方提供给我的,同时还有一个XML文件示例,它应该验证(但没有验证)。我不能公开这些文件,这就是为什么我只复制了有趣的部分。对于您的模式,我仍然会遇到相同的错误:模式“[\s]*”不接受值“”。在这里,{0,10}[\s]*”发现了类似的问题: