我正在尝试将数据从xml转换为json格式,为此,我从xml输出中编写了xsd模式以将数据从xml转换为json。XSD模式将XML数据转换为JSON格式的问题
以下是我的XML需要被转换成JSON
<?xml version="1.0" encoding="UTF-8"?>
<SyncData>
<Employerid>12345</Employerid>
<ImporterEmail>[email protected]</ImporterEmail>
<ReportEmail>[email protected]</ReportEmail>
<Employees>
<wd:WorkerSummary xmlns:is="java:com.workday.esb.intsys.xpath.
ParsedIntegrationSystemFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xdiff="urn:com.workday/esb/xdiff" xmlns:wd="urn:com.workday/bsvc">
<wd:ReferenceID/>
<wd:Name>abcdef,ghijklm</wd:Name>
<wd:Title/>
<wd:EmployeeId>JG00889</wd:EmployeeId>
<wd:EMail>[email protected]</wd:EMail>
<wd:AddressLine1>1400 Post Alm Tyui</wd:AddressLine1>
<wd:City>Bostonn</wd:City>
<wd:State>MC</wd:State>
<wd:Zip>11067</wd:Zip>
<wd:Country>AUS</wd:Country>
</wd:WorkerSummary>
</Employees>
</SyncData>
以下是两个不同的XSD架构的,我已经从上述的XML定义,我得到不同的错误对每一个。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.your-company.com/WorkermapSchema"
xmlns:tns="http://www.your-company.com/WorkermapSchema"
elementFormDefault="qualified">
<xs:element name="WorkerSummary">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ReferenceID" />
<xs:element type="xs:string" name="Name" />
<xs:element type="xs:string" name="Title" />
<xs:element type="xs:string" name="EmployeeId" />
<xs:element type="xs:string" name="EMail" />
<xs:element type="xs:string" name="AddressLine1" />
<xs:element type="xs:string" name="City" />
<xs:element type="xs:string" name="State" />
<xs:element type="xs:string" name="Zip" />
<xs:element type="xs:string" name="Country" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我用这个模式得到的错误是如下
com.workday.esb.xmltojson.XmlToJsonException:根元素类型未找到 “SyncData”
由于上面的错误说根元素“SyncData”未找到,我试图以其他方式定义与根元素的架构如下。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-
microsoft-com:xml-msdata" xmlns:app1="urn:com.workday/bsvc">
<xs:import namespace="urn:com.workday/bsvc"></xs:import>
<xs:element name="SyncData">
<xs:complexType>
<xs:sequence>
<xs:element name="Employerid" type="xs:string" minOccurs="0" />
<xs:element name="ImporterEmail" type="xs:string" minOccurs="0" />
<xs:element name="ReportEmail" type="xs:string" minOccurs="0" />
<xs:element name="Employees" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="WorkerSummary" type="xs:string"/>
<xs:element name="ReferenceID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="SyncData" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
使用上述XSD架构后,我没有得到相关的根元素“SyncData”的错误,但我得到它我不理解它是什么不同的错误,该错误是如下。
org.codehaus.stax2.typed.TypedXMLStreamException:ParseError在[行,列]:[2359]消息:使用类型访问方法
当元素内容不能包含子START_ELEMENT有什么在架构中错误或错误是关于什么?
我已经尝试过对xsd模式进行多次尝试以根据需要完美地执行它,但似乎缺少某些东西,我不确定是否导致失败。
你缺少一个在每个模式。虽然你在第一个模式中得到了正确的WorkerSummary,但是你弄错了,并且把它变成了简单的元素而不是第二个模式中的对象。 ' ''这意味着它不能包含子元素。 –
Optional
非常感谢您的快速响应,我试图在我的第一个模式中提到Element“SyncData”,但是我不能这样做,因为它不允许这样做。并且我尝试在我的第二个模式中添加元素WorkerSummary,但是我看到错误,因为元素类型“xs:element”必须由匹配结束标记“”终止。 –
基本上你必须包含两个模式。让我发布这个答案。 – Optional