2017-10-09 149 views
0

我正在尝试将数据从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模式进行多次尝试以根据需要完美地执行它,但似乎缺少某些东西,我不确定是否导致失败。

+0

你缺少一个在每个模式。虽然你在第一个模式中得到了正确的WorkerSummary,但是你弄错了,并且把它变成了简单的元素而不是第二个模式中的对象。 '''这意味着它不能包含子元素。 – Optional

+0

非常感谢您的快速响应,我试图在我的第一个模式中提到Element“SyncData”,但是我不能这样做,因为它不允许这样做。并且我尝试在我的第二个模式中添加元素WorkerSummary,但是我看到错误,因为元素类型“xs:element”必须由匹配结束标记“”终止。 –

+0

基本上你必须包含两个模式。让我发布这个答案。 – Optional

回答

0

您可以使用此模式

<?xml version="1.0" encoding="utf-16"?> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="SyncData"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="Employerid" type="xsd:int" /> 
     <xsd:element name="ImporterEmail" type="xsd:string" /> 
     <xsd:element name="ReportEmail" type="xsd:string" /> 
     <xsd:element name="Employees"> 
      <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="wd:WorkerSummary"> 
       <xsd:complexType> 
        <xsd:sequence> 
        <xsd:element name="wd:ReferenceID" type="xsd:string" /> 
        <xsd:element name="wd:Name" type="xsd:string" /> 
        <xsd:element name="wd:Title" type="xsd:string" /> 
        <xsd:element name="wd:EmployeeId" type="xsd:string" /> 
        <xsd:element name="wd:EMail" type="xsd:string" /> 
        <xsd:element name="wd:AddressLine1" type="xsd:string" /> 
        <xsd:element name="wd:City" type="xsd:string" /> 
        <xsd:element name="wd:State" type="xsd:string" /> 
        <xsd:element name="wd:Zip" type="xsd:int" /> 
        <xsd:element name="wd:Country" type="xsd:string" /> 
        </xsd:sequence> 
       </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
+0

似乎它是从所有元素名称中删除wd:后执行的。我还看到错误java.lang.NumberFormatException。但是我看到Elements Employerid和Zip,元素类型是以整数形式给出的。不确定哪个元素导致了这种情况,请建议。 –

+0

将全部转换为字符串,然后尝试.. – Optional