我从多个源输入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" }
答案 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。