2014-01-24 67 views
1

我有一个XML和XSD文件。 XML文件是在tomcat/ubuntu平台上使用Java生成的。如何基于XSD“自动修复”XML?

它用于系统之间的集成。第二个系统使用XSD来验证我的XML,它说我的XML不正确。

我想慢慢修复XML文件,但是有时间问题。他们希望我的XML能够比ASAP更快地正确使用XSD。

是否有任何工具/算法可以把我的XML和XSD。添加不存在的模拟字段。

我想要什么: 我还没有正确的XML进入一个方法,并返回XML与XSD正确。

这听起来像一些测试框架应该能够做到这一点。

请帮忙。

+0

[使用XML模式修复Java中的XML]可能的重复(http://stackoverflow.com/questions/8968701/using-a-xml-schema-to-fix-an-xml-in-java ) – Stephan

回答

2

你所描述的f(invalid XML, target XSD) = valid XML实际上不可能以通用的方式构建,除了微不足道的XML/XSD之外的任何东西......这可能是(至少)我不知道任何主流工具可以做到的原因这样的事情......(只是给你我的简短回答你的问题)。

鉴于XSD中可能描述相同XML的多种方式,并且可能采用多种方法来使得无效XML符合要求(严格来说,有些方案无法修复)...找出模式是更实用的,你需要修复你的XML(假设他们有什么错误是一致的),并通过一个自定义的脚本应用这些更正(XSLT可能是一个,但我也见过“diffgram”为基础的方法,取决于你有什么工具和/或技能)。

我在这里回复自己的兴趣......事实上,测试框架(我们只有一个,仅在Windows上运行)通常能够从各种数据源收集测试数据,并创建有效的XML从它,根据指定的XSD和某种映射元数据。在“映射元数据”在这里可以包含由模式我指的是上面所需要的数据...

配置这样一个框架,虽然可能需要一段时间,具体取决于你的XML/XSD复杂...点,除了微不足道的东西外,测试框架中也没有太多的“automagic”。

(更新回复:您的评论嘲弄/框架方面)

你似乎在试图解决的东西,是应该解决其他的东西(即嘲讽)。如果嘲笑是你需要的,那么我的嘲笑方法就有点不同了,如果仅仅是因为我在很多年前遇到了同样的问题(甚至在发明XQuery或XML数据库之类的东西之前)。在最简单的设置中,数据驻留在电子表格中;将专有的XML Builder shapes数据转换为层次结构集合,通过遍历(任意)XSD所描述的内容模型来引入数据;数据可以从Excel中提取,从外部数据源查找,默认等。结果可以是一个或多个XML片段,然后可以使用XSLT或COBOL副本进行转换,并保存为文件,或作为基于TCP/IP的模拟框架(用于Web服务,IMS交易等)

这个模拟方法,我已经描述了...因为我们意识到可以使用相同的数据/测试用例来测试Web服务,IMS事务,驱动UI自动化测试......或者在企业环境中遇到的任何问题。 “塑造”数据以符合特定规范(XSD,COBOL Copybook,CSV等)是“演示文稿”......因此是关注的分离。想象一下,对我来说,“注入”你似乎缺少的领域并获得新的XML是多么容易......

+0

我不同意,要求只是为了让XSD通过保持当前结构。任何使XSD传递的XML都是正确的。我可以编写一个应用程序,循环所有组合都返回一个工作,但它的一个大项目,我今天需要它;-) Thx的回复 – IAdapter

+0

@IAdapter,你太含糊不清,细节同意或不同意..在我的最后。首先,你认为“当前结构”是有效的......一般工具如何知道这一点?两个XML可能会在特定领域重叠,但不同的模型可能导致或尾随相同...一般来说,生成所有可能的组合的机会很大(计算上讲)...如果可以共享具体的例子,我们可以有一个更好的交谈... :)例如 –

+0

。我有XML Ç和架构预计Ç˚F。所以我的文档缺少d标签。将“非常昂贵”并不在此情况下无所谓,因为我只需要会保留现有数据的单一正确的组合,例如Ç TESTDATA IAdapter

1

这是一个有趣的计算机科学挑战,但很难制定好。从某种意义上说,这个问题很简单:如果你有一个文档D不符合模式S,那么你可以通过替换已知符合S的任何文档V来“修复”D.但这没有用,你真的想要的是一些符合S的文档D',并且在某种意义上与D相似;理想情况下,在符合S的所有文档中,您希望使用某种合适的度量标准找到最接近D的文档。

我不知道在这个问题上的任何理论或实际工作,但这听起来很有趣。除非你明天想要答案,在这种情况下忘记它。

+0

我认为,这将是很酷的框架。我使用JAXB代码geenration来解决我的问题,但通用解决方案对于开源项目来说是一个非常好的主意。 – IAdapter

+0

我甚至想过自己创建这样的框架。说实话。我们的目标是帮助测试人员进行集成测试,并为某人提供realData +某些fakeData比只有fakeData或真实数据好得多,但不是XSD有效,所以他无法在他选择的工具中解析它。 – IAdapter