从xml文件获取noNameSpaceSchemaLocation

时间:2013-06-17 12:00:58

标签: c# xml schema xmlreader

我正在尝试使用它的架构读取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无用...... 所以我在我的代码中设置了这样的Schema路径:

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

现在它正在使用架构读取xml文件,但我在这里设置了硬编码的架构路径... 我想从xml文件中获取架构路径(noNamespaceSchemaLocation),并根据xml文件中的架构将架构添加到设置中。通过这样做,我还可以检查Schema是否存在。

说清楚:如何从xml文件中获取noNamespaceSchemaLocation?

2 个答案:

答案 0 :(得分:0)

xsi:noNamespaceSchemaLocation="anyURI"

您可能需要将位置指定为uri,例如file://d:/myschema.xsd

答案 1 :(得分:0)

为什么框架不能加载noNamespaceSchemaLocation属性的值,因为它是为类定义的标准属性?可以是对XML库的增强,以将noNamespaceSchemaLocation属性值加载到Schemas下的某个属性,以便开发人员更容易提取值并检查文件是否存在,然后继续验证Xml。 / p>