c# - 'ref' 属性不能存在。 C#中的验证错误

标签 c# .net xml xsd xsd-validation

我根据以下方法做了一些 xml Xsd 验证: Xml validation using XSD schema

 .......................................................
 XmlReaderSettings settings = new XmlReaderSettings();
 settings.Schemas.Add(null, xsdFilePath);
 settings.ValidationType = ValidationType.Schema;
 settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
 XmlDocument document = new XmlDocument();
 document.Load(xmlFilePath);
 XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);

 while (rdr.Read())
 {

 }
 ...........................................................

它给我错误提示: “‘ref’属性不能存在”

我的 XSD 看起来像:

...........
<xs:element name="totals" minOccurs="0" ref="DocTotal"/>
..................................

<xs:element name="DocTotal">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="totalQty" minOccurs="0" type="xs:decimal"/>
            <xs:element name="totalTax" minOccurs="0" type="xs:decimal"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:string" use="required"/>
    </xs:complexType>
</xs:element>

我的 xml 看起来像:

<totals>
    <totalQty>800</totalQty>
    <totalTax>0.00<totalTax>
</totals>

我相信这个错误的发生是因为 "name""ref": 属性存在于相同的元素中:但是我认为这在 XSD 中并没有错(感谢您对此的评论):在这种情况下,有什么方法可以使用 xml 验证此 XSD:

最佳答案

在我看来 DocTotal 应该是一个类型,而不是一个元素:

<xs:element name="totals" minOccurs="0" type="DocTotal"/>
..................................

<xs:complexType name="DocTotal">
    <xs:sequence>
      <xs:element name="totalQty" minOccurs="0" type="xs:decimal"/>
      <xs:element name="totalTax" minOccurs="0" type="xs:decimal"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>

如果你想在某处定义一个元素的结构(但不是它的名字),并在别处引用它,它应该是一个类型。

关于c# - 'ref' 属性不能存在。 C#中的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378774/

相关文章:

c# - Linq - 对每个类进行分组

javascript - Web 浏览器控件 - 依次导航至 URL

c# - 在方法中声明类或结构

c# - System.Text.Json:如何为枚举值指定自定义名称?

.net - Redis 用于频繁更改的市场信息

javascript - 将 src 属性的特定部分替换为 iframe 元素

xml - 如何从在线 xml 文件中解码 xml 数据

c# - 在 Debug模式下单步执行时 GUI 不会重绘

c# - 将设置类添加到 UWP 应用

ios - 从 XML Parse 匹配 NSDictionary