我最近在C#中做了很多XML处理,从长期的javascript编码回到C#之后我真的错过了一些很好的JS短语。

我有一个相当大的XML文档,由很多元素,子元素等组成。代表在线预订的住宿/航班/景点门票。

到目前为止,我一直在浏览文档以获取我需要的信息。我现在开始将它们转移到辅助函数中。因此,例如,如果我们有来自第三方的航班,我们可能想要更改我们处理预订的方式。这很容易用Xpath检查我们只检查一个元素的值。所以我有一个辅助函数就是这样,所以我的Xpath只在一个地方并返回一个bool。我只有十几个这样的东西直到现在我一直把整个事情视为预订,但我们刚做了一些工作,这些都是关于预订的飞行元素和最后4个帮手我刚刚创建的是非常与飞行相关的,这让我想到如果我这样做的话。

我已经避免了将整个文档转换为Object的需要,因为它的大小非常非常痛苦,目前还不需要,但仍然不是真的。创建所有这些对象将是一个巨大的痛苦,我已经在类似的项目上工作,这条路线已经完成,它只是伤害尝试调试它或初步了解它。我们没有使用所有文档,我们正在进行的处理几乎没有使用它的10%,因此反序列化所有内容似乎有点过度设计。在JS中对它进行反序列化将是一件轻而易举的事情,但是C#只是让它变得如此冗长。我知道我可以使用XSD.exe来消除一些痛苦,但我发现在没有良好架构的情况下使用这样的混乱(当然不存在)。

但它让我思考,如果我们总是从我们的XML创建大量的对象集合,或者我已经完成它的快速方式仍然可以接受?我对它感到满意,但只是试着想一想如果对象会更好。我们确实把它全部转换了,至少它可以在未来的项目中使用它。

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

有关我是否可以继续XPath的任何想法?

有帮助吗?

解决方案

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

如果您没有XML架构,并且无法从数据的源/提供程序获取XML架构,那么决定就不太明确了。正如你所说, XSD.EXE 可以解决一些问题,但这种推断的XML模式通常既不完美也不常常非常漂亮。

很难 - 如果您对使用XPath导航XML感到满意,我会坚持下去。如果您需要经常解析XML,那么最终创建XSD可能是一个好主意。

其他提示

是的,如果你只需要10%的XML,那么由于可能的反序列化过度,XPathing似乎没问题。

在C#4.0和DLR中,有一个动态关键字,可以动态浏览XML结构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top