0

我正在使用 C#,并且正在尝试将 XML 文件反序列化到我的应用程序中。这是一个从多个目录中提取 XML 文件的线程过程,其中每个目录可能具有基于我们客户需求的特定模式。

我想要做的是使用特定目录的模式,以及我需要的反序列化器将 XML 文件中的数据加载到我的应用程序中的对象中。但是,如果 XML 文件中未指定元素,我需要反序列化程序从 Schema 中获取默认值。

我发现有一种方法可以使用 [XmlSchemaProviderAttribute("GetSchemaFile")] 属性和静态方法(参考http://msdn.microsoft.com/en-us/magazine /cc300797.aspx)。但是,这不适用于我目前的情况,因为我有多个特定于不同文件的模式。

有谁知道这样做的方法?还是我应该尝试寻找另一种方法来处理我对默认值的需求?

4

2 回答 2

1

每个 XML 文件都应该指定它使用的模式。这通常在根元素中完成。

在下面的示例中,架构与 XML 文件位于同一目录中。显然,这会根据模式所在的位置(相对于 XML 文件)而改变。但是,关键是您使用 XML 文件来引用架构。然后,您的 XML 解析器将自动应用任何默认值。

<node name="/org/freedesktop/sample_object" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="introspect.xsd">

这是一个链接,其中简要概述了如何引用模式。

于 2012-08-08T20:44:14.797 回答
0

所以我刚刚有机会测试你关于使用 noNamespaceSchemaLocation 的建议@David,并且 XmlSerializer 似乎没有从那里列出的架构中提取任何信息作为默认值。我整天都在寻找一种方法来完成这项工作,这就是我发布的原因。

* 编辑 *

在浏览了许多不同的站点之后,我发现如果 Schema 必须是动态的,那么使用 C# XML Serializer Deserialization 方法从模式中提取默认值是不可能的,这意味着被反序列化的对象可以在不同的模式中具有不同的默认值。

我有一个解决方案可以在我目前的情况下解决这个问题,以便我们的软件处理默认值。

感谢@David 的建议。他们非常感激。

于 2012-08-08T22:41:11.163 回答