将XML从多个XML模式映射到一个Class类型

时间:2015-03-12 09:59:40

标签: c# xml web-services wcf

我从多个源输入xmls,每个源都遵循自己的架构。这些随着时间的推移不断增 我有一个目标类类型。所有这些XML都应该转换为目标类类型的对象。

我正在寻找一种解决方案,它允许我配置任何XML,将其转换为目标类。因此通用数据可以来自属性,值等,并且xml可以具有多个名称空间。 我应该能够将任何attr / node值映射(定义一个map)到目标类类型的属性。保存这些映射并在XML带有类似模式时使用映射。

使用的语言:C#,。net framework 4.0

的示例:

输入: xml样本:

<data> <human> <name>myName</name> </human> </data>

<xmldata> <a:person name="yourName" > </a:person> </xmldata>

目标类:

Person { string name; }

输出:

表示第一个xml 映射:Person.name = "//human/name/text()"

表示第二个xml 映射:Person.name = "//a:person/@name"

两者的结果: Person { name = "yourName" }

2 个答案:

答案 0 :(得分:0)

对于这种情况,我会使用LINQ TO XML
例如:

public static MyObject Create(XElement e)
    {
        var obj = Create();

        obj.A= e.Element("A").Value;
        obj.B= e.Attribute("B").Value;           


        return obj;
    }

答案 1 :(得分:0)

如何创建一个sql表以获得每个参数的XPath值。此表中的一行将包含一个源的xpath。我们可以让一个主键是源id,剩下的列将为输入xml所需的每个参数提供xpath。

现在,每次需要登录新源时,只需要一个sql changescript来配置该源,或者开发一个UI,让用户从源代码中选择样本xml并填充表。

首先,最好使用changecript,以后可以考虑为它开发一个UI,这也是你选择的偏好。

一旦在表行中有源配置,每次必须从源处理xml时,从表中读取相应的配置项并相应地处理源xml。