我有一些用户数据来自一个需要作为XML提供给另一个系统的系统。定义了一个模式,但目标系统将接受XML,无论它是否通过模式,而是以静默方式失败。
我在SSIS中使用脚本组件并且可以编写自己的C#验证,但我想知道是否有人能想出一种方法来根据模式验证XML然后将XML拆分为两个文件。一个有效用户,另一个有无效用户? XSD有自定义类型,正则表达式模式等。所以我想尽可能利用已经存在的东西。我在C#中回答后最好
<Users>
<User>
<FirstName/>
<LastName/>
<Etc../>
</User>
</Users>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Users">
<xs:complexType>
<xs:sequence>
<xs:element name="User">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" />
<xs:element name="LastName" />
<xs:element name="Etc.." />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:1)
没有&#34;整洁&#34;解决方案 - 您的问题类似于在消息传递中进行xml交换(或#34;批处理&#34;)处理时遇到的问题,在处理批处理的过程中可能会出现故障,以及如何从中恢复。
我能想到这样做的最好方法是将输入数据XML实例转换为许多小的XML实例,而不是:
<Users>
<User>
...
</User>
<User>
...
</User>
</Users>
你只有一堆这些:
<Users>
<User>
...
</User>
</Users>
<Users>
<User>
...
</User>
</Users>
然后针对每个XML实例运行验证,然后对那些失败的问题进行验证&#34;路由&#34;处理过程。
感谢这不能直接回答你的问题,但是当它是一个XML实例时,我无法想到这样做的方法。唯一想到的是你可以注册一个ValidationEventHandler,每次验证器遇到错误时都会触发,然后在那里处理每个失败,但它似乎过多了。
答案 1 :(得分:0)
就个人而言,我会:
编辑:
如果您的XSD模式有许多不同类型需要验证(我错误地认为元素是唯一的问题),最好的方法是使用Tom的建议。
答案 2 :(得分:-1)
我想你想要两件事:
1.Validate XML
2.将XML分成有效和无效的用户。
对于1,它也可以用Java完成。请找到这个链接 http://www.journaldev.com/895/how-to-validate-xml-against-xsd-in-java也是如此。
对于2,有效和无效用户,您可以使用XSLT来定义用于隔离有效或无效用户的逻辑。可以编写Java程序来运行XSLT。