2012-03-27 56 views
0

我有一个Java程序,我必须根据XSD模式验证XML消息。到现在为止还挺好。但是现在我得到了一个新的要求,其中验证的一部分基于XML消息的内容而不同。基于XML内容的XSD验证

因此,基于一个场(1)的某些字段是的nillable与否和一些枚举是不同的值。但是,我无法在验证之前解析文档...所以我应该如何处理这个问题?

1)有2个不同的XSD文件,处理XML文本(=丑陋的),并提取一个字段来决定XSD应该用什么?

2)有3个不同的XSD文件。 2个不同的选项和1个联盟,我们可以通过匹配2个选项的方式进行验证?我们可以正确地解析XML,提取字段并决定使用哪个更具体的XSD进行额外验证?

3)其他选项?

+0

你是什么意思,你'不能在验证之前解析文档'? – maximdim 2012-03-30 14:56:43

+0

那么如果文档没有被验证,它可能是非常无效的XML,因此解析会产生一个异常。 – hcpl 2012-04-02 09:50:27

回答

1

不要使用JAXB解析它,而是使用SAX/StAX类型解析器(或者,如果您真的想要使用DOM,尽管SAX会更快,如果您只需要少量元素)来定位和分析元素,您需要为了确定需要使用的正确模式。一旦您收集了足够的信息,请使用适当的模式验证来中止解析并再次解析。

+0

马克西姆,谢谢。我不知道我可以使用SAX解析它,而无需首先验证。这解决了我的问题。 – hcpl 2012-05-31 08:43:25

0

您是否正在编写自己的java验证?我会建议使用开源或付费验证:XML Schema (XSD) validation tool?工具。

另外根据你所描述的,它听起来像你的模式不再向后兼容,因为你不得不使用基于某些元素的两个不同的模式,我会建议回复到需求并查看模式是否可以更改和更新以保持向后兼容性。这将允许继续使用1 Schema作为你的xml文件。