【问题标题】:How to use namespaces when using XSD to validate a XML file使用 XSD 验证 XML 文件时如何使用命名空间
【发布时间】:2016-10-29 14:35:57
【问题描述】:

我正在尝试了解如何使用 XSD 验证 XML 文件。 我不太了解命名空间。

如果我有代码:

    XmlDocument xDoc = new XmlDocument();
    xDoc.Load(file.InputStream);
    xDoc.Schemas.Add("http://www.w3.org/2001/XMLSchema-instance", @"C:MyXSD.xsd");

    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
    xDoc.Validate(eventHandler);

我得到错误: "属性声明的目标命名空间,无论是本地的还是全局的,都不能匹配http://www.w3.org/2001/XMLSchema-instance。"

当我将架构添加到 xDoc 时,我应该将命名空间设置为什么?

我有一个这样的 xml:

<?xml version="1.0"?>
<rootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    // My Nodes
</rootNode>

我从那个 XML 创建了一个 XSD。

<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xsd:element name="rootNode">
   // My Nodes
  </xsd:element>
</xs:schema>

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    在您的场景中,您可以将 null 作为命名空间传递给 Schemas.Add,因为您实际上并未使用命名空间,即您的 XML 文档不使用命名空间(可以使用 xmlns 属性或使用命名空间前缀)。

    有关命名空间的更多信息,请参阅http://www.w3schools.com/xml/xml_namespaces.asp

    请注意,http://www.w3.org/2001/XMLSchema-instance 是一个命名空间,用于定义仅与架构基础架构相关的架构属性,与您的特定 XML 架构无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2011-02-28
      • 1970-01-01
      相关资源
      最近更新 更多