gpt4 book ai didi

c# - 比 xsd 生成的类更快的 XML 文件读取

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:47 25 4
gpt4 key购买 nike

我正在处理大量包含 HL7 信息的 XML 文件。

这些 XML 文件的结构在几个复杂的 XSD 文件中进行了描述。它们是 XSD 文件的层次结构。像这样:

  • 消息.xsd
    • 批处理.xsd
    • 数据类型.xsd
      • Fields.xsd
    • 更多文件.xsd
      • Fields.xsd

这不是确切的用法,但它有助于传达它们的工作原理。

现在我可以跑了

xsd .\messages.xsd /classes

它会生成一个名为 messages.cs 的文件,该文件的长度超过 240,000 行。

注意:尽管 XSD 很复杂,但实际的 xml 文件平均约有 250 行 XML,每行约 25 个字符(不是很大)。

我可以使用该文件反序列化我的 xml 文件,如下所示:

var bytes = Encoding.ASCII.GetBytes(message.Message);
var memoryStream = new MemoryStream(bytes);
var message = ormSerializer.Deserialize(memoryStream);

一切都很好而且很快。

当需要从 xml 结构中提取数据时,它太慢了

是否有另一种访问我的 xml 数据的方法会更快?我应该使用 XPathDocumentXPathNavigator 吗? XPathNavigator 是否可以使用所有 XSD 文件,这样我就不必为我处理的每个 xml 文件重新创建它(并非所有 XML 节点都在所有 XML 文件中)?

还有其他快速获取 XML 数据的想法吗?

最佳答案

您正在使用的技术(将 XML 自动映射到 Java 或 C# 类)称为“数据绑定(bind)”,当模式简单且较小时,它可以很好地工作。对于像 HL7 这样又大又丑的东西,我会说它是不可能的。

你在做什么处理?为什么不能在 XSLT 或 XQuery 中执行此操作有什么充分的理由吗?这些语言旨在处理 XML,它们避免了在必须将数据从 XML 模型转换为编程语言(如 Java 或 C#)的数据模型时出现的“阻抗不匹配”。

关于c# - 比 xsd 生成的类更快的 XML 文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com