2017-10-09 6 views
0

J'essaie de transformer les données du format xml au format json. Pour cela, j'ai écrit un schéma xsd à partir de la sortie xml pour transformer les données de xml en json.Problème avec le schéma XSD lors de la transformation des données du format XML au format JSON

Ce qui suit est mon xml qui doit être transformé en 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> 

Voici quelques-ce que je l'ai défini du xml ci-dessus indiquée et j'obtiens différentes erreur est pour chacun des deux schémas XSD différents.

<?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> 

L'erreur que je recevais de ce schéma est le suivant

com.workday.esb.xmltojson.XmlToJsonException: Root Type d'élément non trouvé "SyncData"

Depuis la ci-dessus erreur dit l'élément racine "SyncData" pas trouvé, j'ai essayé de définir le schéma d'une autre manière avec l'élément racine comme suit.

<?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> 

Après avoir utilisé le schéma xsd ci-dessus, je ne reçois pas d'erreur lié à l'élément racine « SyncData », mais je reçois une autre erreur que je ne comprends pas ce qu'il en est, l'erreur est comme suit.

org.codehaus.stax2.typed.TypedXMLStreamException: ParseError au [rang, col]: [2359] Message: Contenu de l'élément ne peut pas contenir l'enfant start_element lors de l'utilisation dactylographié méthodes d'accès

Y at-il mal dans le schéma ou quelle est l'erreur?

J'ai essayé plusieurs tentatives sur le schéma xsd pour l'exécuter parfaitement comme requis, mais il semble qu'il manque quelque chose dont je ne suis pas sûr que cela cause l'échec.

+0

Il vous manque un dans chaque schéma. Bien que WorkerSummary ait été corrigé dans le 1er schéma, vous vous êtes trompé et vous l'avez transformé en élément simple et non en objet dans le second schéma. '' ce qui signifie qu'il ne peut pas contenir d'élément enfant. – Optional

+0

Merci beaucoup pour votre réponse rapide, j'ai essayé de mentionner Element "SyncData" dans mon 1er schéma mais je ne pouvais pas le faire car il n'était pas autorisé à le faire.Et j'ai essayé d'ajouter l'élément WorkerSummary dans mon deuxième schéma, mais Je vois l'erreur comme Le type d'élément "xs: element" doit être terminé par l'étiquette de fin correspondante "". –

+0

Fondamentalement, vous devez inclure deux schémas. permettez-moi de poster cela comme réponse. – Optional

Répondre

0

Pouvez-vous utiliser ce schéma

<?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

Semble qu'il est en cours d'exécution après avoir supprimé wd: de tous les noms d'éléments. Aussi, je vois l'erreur java.lang.NumberFormatException. Mais je vois pour les éléments Employerid et Zip, le type d'élément est donné en tant qu'entier.Non sûr quel élément est à l'origine de cela, S'il vous plaît suggérer. –

+0

Tout convertir en chaîne d'abord, puis essayez .. – Optional