繁体   English   中英

无法在C#项目中使用引用的XML模式文件(xsd)

[英]Cannot use a referenced XML schema file (xsd) in a C# project

我定义了一个非常简单的XML模式,名为MySchema ,我将其添加到项目的引用中:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MySchema"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="UserList">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="User" type="xs:string" minOccurs="0" maxOccurs="unbounded">
        </xs:element>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>
  </xs:element>

</xs:schema>

我应该能够使用XmlDocument.GetElementById

我的示例XML文件是

<?xml version="1.0" encoding="UTF-8"?><UserList id="local"/>

但是,当我运行GetElementById("local")我仍然得到“NullReferenceException”。

我想我需要做的不仅仅是将xsd文件添加到引用中。 有人能告诉我哪里出错了吗?

如果没有定义DTD或XSD来定义id是什么,则GetElementById方法不起作用。

如果您在未显示的代码中定义XSD或DTD,请更新您的问题。

DOM实现必须具有定义哪些属性属于ID类型的信息。 虽然可以在XSD架构或DTD中定义类型ID的属性,但此版本的产品仅支持在DTD中定义的那些。 除非在DTD中定义,否则名称为“ID”的属性不是ID类型。 不知道属性是否为ID类型的实现应该返回Nothing。

http://www.xtremevbtalk.com/showthread.php?t=313101

基于帖子顶部的XSD,我会说你没有将xsd加载到XmlDocument实例中,以便它知道哪个是xs:id

看起来XmlDocument.GetElementById不支持在XSD架构中定义的ID属性,只支持DTD:

DOM实现必须具有定义哪些属性属于ID类型的信息。 虽然可以在XSD架构或DTD中定义类型ID的属性,但此版本的产品仅支持在DTD中定义的那些。 除非在DTD中定义,否则名称为“ID”的属性不是ID类型。 不知道属性是否为ID类型的实现应该返回null。

您可以将SelectSingleNode与传统的XPath一起使用,但是:

doc.DocumentElement.SelectSingleNode("//UserList[@id='local']")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM