【问题标题】:XmlDocument XSD Validation does not find errorXmlDocument XSD 验证未发现错误
【发布时间】:2015-07-29 17:10:13
【问题描述】:

我用代码构建我的 XmlDocument。 在返回之前,我想根据文件中定义的 XSD 对其进行验证。

xmlDocument.Schemas.Add(null, "MySchema.xsd");
xmlDocument.Validate((sender, e) => {
    if (e.Severity == XmlSeverityType.Error) {
                // Write error to log
    }
});

永远不会发生任何错误。尽管出于测试目的,我在 XmlDocument 中添加了一个错误。

谁能告诉我,我做错了什么?

编辑: 我的 XSD 开始像

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyRoot">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Things" type="Things"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="Things">
        <xs:sequence>
            <xs:element name="Thing" type="Thing" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

...等等。我认为其余的与问题无关。

在断点处,我从我的 XmlDocument 中复制了 InnerXml 的(前几行):

    <?xml version="1.0" ?> 
        <MyRoot>
           <ThingsAndSomeStuffMakingItInvalid>
               <Thing>

...等等。

谢谢 最大

【问题讨论】:

  • 您还应该向我们展示您的 XML / XSD。
  • 编辑了我的问题:我添加了 xsd 和 xml 的开头。我认为内部细节和结束标签与我的问题无关。

标签: c# xml validation xsd xmldocument


【解决方案1】:

我认为您的问题是由于在您的 XML 文件中您没有引用您的“MySchema”这一事实引起的。因此,在尝试对其进行验证时,验证器将不知道该 XML 文件应针对该 XML 文件进行验证。

【讨论】:

  • 我这里没有 XML 文件。我在内存中创建了一个 XmlDocument。我尝试在 xmlDocument.Schemas.Add(null, "MySchema.xsd"); 行中添加架构
  • 从内存 xml 中可以看出,其中没有架构引用。在此处查看:w3schools.com/schema/schema_howto.asp 这是在 XML 中引用模式的方式。
  • 我明白了。但是如何在代码中将架构添加到 XmlDocument 中?我以为 xmlDocument.Schemas.Add 会那样做?
  • 尽量不要使用 null 作为参数,而是使用实际的目标命名空间。
  • 感谢您的命名空间提示。我发现了我的错误:我的构建输出中的 xsd 没有更新。除了 xmlns:xs="w3.org/2001/XMLSchema" 之外,它还包含另一个命名空间(我不久前在原始文件中删除了)。当我从构建输出中使用它时,XSD 中有一个命名空间,而 XML 中没有命名空间。不幸的是,这个问题并没有引发错误 - 它只是忽略了 XSD。
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2014-05-29
相关资源
最近更新 更多