我根据以下方法做了一些 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/