0

这是来自 xsd 和 xml 的示例

XML

<?xml version="1.0" encoding="UTF-8"?>
<config test2="true">
</config>

XSD

<?xml version="1.0" encoding="utf-8"?>   
<xs:schema  targetNamespace="rules.xsd" xmlns="rules.xsd" elementFormDefault="qualified"  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
  <xs:element name="config">
    <xs:complexType>
      <xs:attribute name="test1" type="xs:boolean" default="false" />
      <xs:attribute name="test2" type="xs:string" default="mary123" />
    </xs:complexType>
  </xs:element>
</xs:schema>

我可以使用此 xsd 使用此代码块在 C# 中验证此 xml

XmlDocument doc = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader(System.IO.Path.GetFullPath("Mi_XSD_here.xsd"));
XmlSchema schema = XmlSchema.Read(schemaReader, ValidationCallBack);
doc.Schemas.Add(schema);
doc.Load("Mi_XML_here.xml");
doc.Validate(ValidationCallBack);

问题是:我在 xsd 中有两个默认属性,但是当我运行此代码时,他没有在 XmlDocument 中插入属性,结果与我传递给系统的 xml 相同。

默认属性不起作用,我不知道为什么它们不起作用,我相信存在其他形式来解决这个问题,我确实找到了这个但没有起作用

Extensions.Validate 方法

obs:ValidationCallBack 是一些我认为与问题无关的错误函数返回

4

1 回答 1

0

您的架构的目标命名空间是 rules.xsd,因此您的 xml 文件需要包含它以针对架构进行验证。另外我假设 teste2 是一个错字(因为它不符合架构),你的意思是 test2:

<config test2="" xmlns="rules.xsd" />

在这种情况下,只有 test1 将添加默认值,因为 test2 已设置为空字符串。

于 2012-06-15T16:51:31.333 回答