【问题标题】:How to deal with multiple xml standards? [closed]如何处理多个xml标准? [关闭]
【发布时间】:2012-10-25 15:57:55
【问题描述】:

我正在尝试将一组本地包装类写入我们的机构 API(我在一所高等教育机构工作)。这些类的目的是安全地从远程服务中提取脚本,并允许抽象从该服务如何工作到我们的程序员。该服务的运作方式是保密的,但我也需要回答的问题是:

当每个成绩单响应以不同的 xml 格式出现时,如何处理这个问题,具体取决于它来自哪所学校。超过 30 个。

例如:机构 A 在靠近根的文档顶部有一个标签,学生的 GPA 为 |GPA|4.0|/GPA|而另一个机构可能将它放在 XML 的完全不同的部分,靠近底部,可能有 3 个孩子深,并将标签命名为 |GradePointAverage|4.0|/GradePointAverage| (假装|是xml尖括号)

对于如何处理这种缺乏标准化的问题有什么建议吗?

【问题讨论】:

  • 规范的答案是使用 xslt 将它们全部转换为单一的标准格式。然而,在实践中,我不想成为负责这样做的人。给这只猫剥皮的方法比这简单得多。
  • 是否可以先创建标准模板,动态构建标准xml模板。例如,对于标准 xml 结构中的 元素,您将在其他 xml 文档中搜索 元素的值并填充模板。因此,您可以从其他格式构建标准 xml 格式。但你也可以考虑同义词
  • 那很好,但还没有足够的标准化来做到这一点拉里,有些人在其中附加了他们的机构名称:|instA:GPA|4.0|/instA:GPA|
  • @Spudley 你对其他方式有什么想法吗?我希望猫很容易被剥皮。
  • 这不是一个问题吗?如果它被关闭为“不是一个真正的问题”,那么也许每个人都经常处理这个问题,以至于我只是个白痴?如果有简单的解决方案,请告诉我!

标签: c# xml xml-parsing


【解决方案1】:

听起来您应该针对一种通用数据模型,然后是 30 个能够从 XML 反序列化为该数据模型的不同类。根据它们的确切差异,可能重用的重要方面,您甚至可以参数化一些差异。使用 LINQ to XML 可以相当容易地解析任何一种格式。

我的目标是大量简单的代码,而不是少量的“聪明”代码:解析每种单独的格式应该相当简单,并且希望易于测试。是的,编写这段代码会很乏味,但最终应该很容易理解,并且如果需要,可以轻松添加更多格式。

您当然可以使用 XSLT 执行转换为单一格式,但我个人更愿意编写 C# :)

这假设您可以创建一个通用数据模型 - 如果格式非常不同,您可能会发现如果没有可怕的最低通用数据,您就无法准确表示每个文件中的数据 -分母。想出一个好的数据模型可能就像编写每个单独的解析器一样困难。

【讨论】:

  • 这正是我所担心的。我将有 30 个类,或 1 个类,其中包含 30 个案例语句,其中填充了一行代码来填充主要的通用“Transcript”类对象:TranscriptObject.Name = XMLGetValueLogicHere; TranscriptObject.GPA = XMLGetValueLogicHere;
  • @DFTR:是的,您需要 30 位不同的代码。您还期望如何处理 30 种不同的格式?这就是为什么每段代码都很简单很重要 - 这样做很无聊,但它不应该导致长期问题。如果一种格式发生了一点变化,它不会干扰其他任何东西。如果您不再需要格式,只需摆脱它。如果您需要新格式,只需添加另一个类。尽可能让它们彼此独立。这很乏味,但这只是必须处理许多不同格式的自然结果。
  • 谢谢乔恩。这是我看到乱七八糟的数据时想到的解决方案。我主要只是希望我是不正确的。我将暂时搁置这个问题,如果没有人有任何其他想法,我会标记你的正确。
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多