C# 在线验证程序通过时,使用XSD的XML验证失败
我有一个简单的XML文件,我想根据XSD进行验证。但是,每当我运行验证代码时,我都会收到一个验证异常,表明“multitest”节点未定义(未定位的错误消息:“multitest元素未声明”)。奇怪的是,我试图在几个在线验证站点(,)上对照XSD验证XML,他们说XML是完全有效的 这是我用来验证的代码(C#使用Mono库) 这是我尝试验证的XML文件:C# 在线验证程序通过时,使用XSD的XML验证失败,c#,xml,mono,xsd-validation,C#,Xml,Mono,Xsd Validation,我有一个简单的XML文件,我想根据XSD进行验证。但是,每当我运行验证代码时,我都会收到一个验证异常,表明“multitest”节点未定义(未定位的错误消息:“multitest元素未声明”)。奇怪的是,我试图在几个在线验证站点(,)上对照XSD验证XML,他们说XML是完全有效的 这是我用来验证的代码(C#使用Mono库) 这是我尝试验证的XML文件: <?xml version="1.0" encoding="UTF-8"?> <multitest> <
<?xml version="1.0" encoding="UTF-8"?>
<multitest>
<testfile>
<location>blah.xml</location>
</testfile>
</multitest>
blah.xml
XSD也非常简单:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="multitest">
<xs:complexType>
<xs:sequence>
<xs:element name="testfile" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="location"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我错过了什么
补充:
奇怪的是,同样的代码在下面给出的XML和XSD上完美地工作:
XSD:
XML:
blahblah.txt
samplecmd
blahblahblah_result.txt
我认为这已经结束,因为这本质上是一个打字错误,而不是一个实际问题
为了完整性,我将指出您正在根据错误的模式进行验证。读取架构字符串的第一行是:
using (StringReader sr = new StringReader (Resources.tests))
和
Resources.tests
听起来像是指问题中的第二个模式(您已经确认了这一点)。只需将其更改为正确的模式,就可以解决您的问题。失败的XML是否包含导致其失败的字节顺序标记?通常,这个错误会说“根级别的数据无效。第1行第1列”或类似的话。不管怎么说,这可能值得一试。@noMad17谢谢你的建议,但这似乎不是问题所在。使用NP++,设置/转换为UTF8(带/不带BOM)在这两种情况下都会出现错误。确切的错误(未定位)是:“未声明multitest元素”。是否有多个区域性特定的资源文件?尝试将XSD硬编码为字符串并尝试?并且,很明显,您确定要根据正确的模式进行验证吗?您的代码有新的StringReader(Resources.tests)
,它看起来像是第二个架构的名称。如果你使用第二个,你会得到这个错误。毫无疑问地沉入了错误的模式。为了寻找其他问题,我投入了太多精力,以至于我完全忽略了这一点。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tests">
<xs:complexType>
<xs:sequence>
<xs:element name="test" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="sample"/>
<xs:element type="xs:string" name="cmd"/>
<xs:element type="xs:string" name="result"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<tests>
<test>
<sample>blahblah.txt</sample>
<cmd>samplecmd</cmd>
<result>blahblahblah_result.txt</result>
</test>
</tests>
using (StringReader sr = new StringReader (Resources.tests))