Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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
C# 在线验证程序通过时,使用XSD的XML验证失败_C#_Xml_Mono_Xsd Validation - Fatal编程技术网

C# 在线验证程序通过时,使用XSD的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文件,我想根据XSD进行验证。但是,每当我运行验证代码时,我都会收到一个验证异常,表明“multitest”节点未定义(未定位的错误消息:“multitest元素未声明”)。奇怪的是,我试图在几个在线验证站点(,)上对照XSD验证XML,他们说XML是完全有效的

这是我用来验证的代码(C#使用Mono库)

这是我尝试验证的XML文件:

<?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))