【问题标题】:Get noNameSpaceSchemaLocation from xml file从 xml 文件中获取 noNameSpaceSchemaLocation
【发布时间】:2017-05-30 21:01:43
【问题描述】:

我正在尝试使用其架构读取 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?

【问题讨论】:

    标签: c# xml schema xmlreader


    【解决方案1】:

    xsi:noNamespaceSchemaLocation="anyURI"

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

    【讨论】:

    • 我发现使用settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; 会使XMLReader 使用架构文件,但XMLReader 仍然会读取xml 文件,即使架构未找到。这就是为什么我想从 xml 文件中获取架构路径并检查该文件是否存在。
    • 它只是一个带有命名空间的属性。读取属性,然后在您获得的位置使用 File.Exists。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      相关资源
      最近更新 更多