我正在处理大量包含HL7信息的XML文件。
这些XML文件的结构在几个复杂的XSD文件中描述。它们是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数据?我应该使用XPathDocument
和XPathNavigator
吗? XPathNavigator
可以使用所有XSD文件,因此我不必为我处理的每个xml文件重新创建它(并非所有XML节点都在所有XML文件中)吗?
快速获取XML数据的其他想法吗?
答案 0 :(得分:1)
您正在使用的技术(将XML自动映射到Java或C#类)称为“数据绑定”,当架构简单且小巧时,它可以很好地工作。对于像HL7这样大而丑的东西,我会说这是一个非首发。
你在做什么样的处理?你有什么理由不能在XSLT或XQuery中做到这一点吗?这些语言旨在处理XML,它们可以避免在必须将数据从XML模型转换为Java或C#等编程语言的数据模型时出现的“阻塞不匹配”。
答案 1 :(得分:0)
你看过像XStreamingReader这样的东西吗?它允许您在流式传输大型XML文档时使用Linq to XML。我过去看了这个,并且能够流式传输XML,识别XML块并将它们反序列化为对象。如果你搞砸了这个并需要例子,我可以挖掘代码。