我正在编写一个服务,它从内存中读取一串以逗号分隔的值(及其标签)并将它们打包到一个 XML 文件中发送。数据所有者正在为每个 XML 结构生成一个关联的 XSD 文件。.txt
在通过 Web 服务发布 XML 之前,我想阅读 XSD 文件以验证文件中的数据标签列表。如果检测到 XSD 和 txt 文件之间存在差异,我希望代码抛出异常。如果匹配成功,它会从.txt
文件中获取值,打包并发布 XML 请求。我正在寻找如何做到这一点的整个过程(从输入到输出)的示例。
读取输入文件并收集属性和值 (TestValuesIN.txt)
"test.Foo", 122;
打开一个 XSD 文件并根据我的输入文件的元素列表对元素执行一对一的匹配。现在我只关心 XSD 中存在的“Test.Foo”(元素:Test.Foo val:)。(TextXSD.xsd)
<?xml version="1.0"?>
<!-- Generated using Flame-Ware Solutions XML-2-XSD v2.0 at http://www.flame-ware.com/Products/XML-2-XSD/ -->
<xs:schema id="batch-execution" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="batch-execution" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="insert">
<xs:complexType>
<xs:sequence>
<xs:element name="test.Foo" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="val" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="fire-all-rules">
<xs:complexType>
<xs:attribute name="max" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="get-objects">
<xs:complexType>
<xs:attribute name="out-identifier" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
然后将 XML 发布到
http://mycamelhump.<myurl>.com:8080/drools-camel-service/kservice/CommTestXML/execute
URI
<batch-execution>
<insert>
<test.Foo>
<val>122</val>
</test.Foo>
</insert>
<fire-all-rules max="-1"/>
<get-objects out-identifier="also-foo"/>
</batch-execution>
代码获取结果将输出打印到 (TestValuesOUT.txt)
"Test.Foo", 100;