Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lxml XSD处理报告空字符串与它应该匹配的正则表达式不匹配。为什么?_Xml_Regex_Xsd_Lxml - Fatal编程技术网

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

我正在尝试使用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: 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]*”发现了类似的问题: