【问题标题】:Mapping XMLs from multiple XML schemas to one Class type将 XML 从多个 XML 模式映射到一种类类型
【发布时间】:2015-03-12 09:59:40
【问题描述】:

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

我正在寻找一种允许我配置任何 XML 并将其转换为目标类的解决方案。所以通用的数据可能来自属性、值等,并且 xml 可以有多个命名空间。 我应该能够将任何 attr/ 节点值映射(定义映射)到目标类类型的属性。保存这些映射并在 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" }

【问题讨论】:

  • 您找到问题的合适解决方案了吗?

标签: c# xml web-services wcf


【解决方案1】:

对于这种情况,我会使用 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;
    }

【讨论】:

  • 我实际上想为 xml 生成一个映射器/转换器来生成对象。这些映射器应该由一个处理程序处理,然后给我目标对象。
  • Mapper1 map1.IdMapper= '//human/id/text()" map1.NameMapper = "//human/name/text()" Mapper2 map2.IdMapper= '//a:person/@id" map2.NameMapper = "//a:person/@name" 然后转换器将这些映射器与 xpath 一起使用。 `targetObject = getObject(map1, xml1)
【解决方案2】:

如何创建一个 sql 表以具有每个参数的 XPath 值。此表中的一行将具有一个源的 xpath。我们可以有一个主键作为源 ID,其余列将具有输入 xml 所需的每个参数的 xpath。

现在,每次您需要载入新源时,只需为该源配置一个 sql 更改脚本,或开发一个 UI 让用户从源中的示例 xml 中进行选择并填充表格。

首先,使用 changescript 是个好主意,以后可以考虑为其开发 UI,这又是您的偏好选择。

一旦你在表行中设置了源配置,每次你必须从源处理 xml 时,从表中读取相应的配置条目并相应地处理源 xml。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2011-05-30
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多