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に2つのデフォルト属性がありますが、このコードを実行すると、XmlDocumentに属性が挿入されないため、結果はシステムに渡したものと同じxmlになります。

デフォルトの属性が機能しておらず、なぜ機能していないのか理解できません。この問題を解決するための他のフォームが存在すると信じています。これは見つかりましたが、機能しませんでした。

Extensions.Validateメソッド

obs:ValidationCallBackは、問題とは関係がないと思うエラー関数のリターンです。

4

1 に答える 1

0

スキーマのターゲット名前空間はrules.xsdであるため、スキーマに対して検証するには、xmlファイルにそれを含める必要があります。また、teste2はタイプミスであり(スキーマに準拠していないため)、test2を意味していると思います。

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

この場合、test2はすでに空の文字列に設定されているため、test1のみがデフォルトで追加されます。

于 2012-06-15T16:51:31.333 に答える