2009-10-27 57 views
0

我一直在C#中处理C#中的很多XML处理,并且从长时间的JavaScript代码返回到C#之后,我真的错过了一些JS的快捷方式。什么更好:反序列化对象与Xpathing对XML文档?

我已经去了一个很大的XML文档,这些文档由很多元素,子元素等组成。代表一个在线预订的住宿/航班/景点门票。

到目前为止,我刚刚通过文档Xpathing来提取我需要的信息。我现在已经开始将这些转换为辅助函数。因此,例如,如果我们处理预订,如果它有第三方的航班,我们可能会改变。这很容易检查Xpath我们只是检查一个元素的值。所以我有一个辅助函数,它可以做到这一点,所以我的Xpath只在一个地方,并返回一个布尔值。我只有大约十几个这样的人,直到现在我一直把整个事情当作预订来处理,但是我们刚刚完成了一些关于预订的飞行元素和最后4个帮手的工作刚刚创建的飞机与飞行相关,这让我想到如果我这样做是正确的。

我避免了将整个文档转换为Object的必要性,因为它的大小非常非常痛苦,而且目前还不需要它,所以仍然不是真的。创建所有这些对象将是一个巨大的痛苦,我已经完成了类似的项目,在这条路线已经完成,它只是试图调试它,或者初始化它的头。我们没有使用所有的文档,我们所做的处理几乎不使用它的10%,所以对所有内容进行反序列化似乎都有些过度设计。在JS中对它进行反序列化将是一件轻而易举的事情,但是C#只是让它长得啰嗦。我知道我可以使用XSD.exe来消除一些痛苦,但是我发现如果没有一个好的模式(这当然不存在)使用这样的混乱。

但它让我想到,我们是否应该总是从我们的XML中创建一个巨大的对象集合,还是我已经完成的快速方法仍然可以接受?我对此感到满意,但只是试图通过Object来更好地思考它。我们确实将其全部转换,至少在未来的项目中我们需要它时可以使用。

我知道,可能有一些关于xpathing速度的评论,但它的速度足以满足我们目前的需求,所以这不是问题。

任何想法,如果我可以继续XPathing?

回答

1

如果你有一个XML模式(XSD),那么我可能会一直喜欢反序列化到对象的方法 - 使用漂亮的CLR对象更简单,更简单。

如果您没有XML架构,并且无法从您的数据的源/提供者那里获得一个,那么这个决定并不十分清楚。正如你所说,XSD.EXE可以带来一些痛苦,但这种推断的XML模式通常既不完美也不常常很漂亮。

坚韧 - 如果您对使用XPath导航XML感到满意,我会坚持使用它。如果你有需要经常解析的XML,最终创建一个XSD可能是一个好主意。

+0

感谢您花时间回答。我知道它确定,而不是一种“肮脏”的方式。干杯。 – 2009-10-28 12:02:59

1

是的,如果你只需要10%的XML,由于可能的反序列化过度杀伤,XPath在这里看起来可以。

在C#4.0和DLR中有一个动态关键字,它允许动态地探索XML结构。

+0

感谢您花时间回答。我将阅读关于动态的东西。但是现在我们被困在.net 1不幸的是 – 2009-10-28 12:03:37

+0

我希望你的意思是你坚持使用.NET 1.1? – 2010-01-13 02:16:21