1

スキーマでxmlファイルを読み込もうとしています。

私のxmlファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<PersonList 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="D:\MySchema.xsd">

今、私は次のようなxmlファイルを読んでいます:

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

using (XmlReader reader = XmlReader.Create("MyXmlFile.xml", settings))
{
    while(reader.Read())
    //.....
}

private static void ValidationCallBack(object sender, ValidationEventArgs args)
{
    if (args.Severity == XmlSeverityType.Warning)
    Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
    else
    Console.WriteLine("\tValidation error: " + args.Message);

}  

問題は、スキーマ 'D:\MySchema.xsd' が見つからない場合、まだ xml を読み取っているためnoNamespaceSchemaLocation役に立たないことです...コードにスキーマ パスを次のように設定しました。

settings.Schemas.Add(null, "D:\\MySchema.xsd");

そして今はスキーマを使ってxmlファイルを読み込んでいるのですが、ここではスキーマパスをハードコーディングして設定しています...xmlファイルからスキーマパス(noNamespaceSchemaLocation)を取得し、スキーマに応じて設定にスキーマを追加したいxml ファイルから。このようにすることで、スキーマが存在するかどうかも確認できます。

明確にするために: XML ファイルから noNamespaceSchemaLocation を取得するにはどうすればよいですか?

4

2 に答える 2

0

xsi:noNamespaceSchemaLocation="anyURI"

おそらく場所をuriとして指定する必要があるので、次のようなものですfile://d:/myschema.xsd

于 2013-06-17T12:08:38.947 に答える