Goodmorning,
I'm using the 1.1.2 version and I 'have a problem to transfomr an XML input file to a flat file separated.
I expect the following output:
name,surname,state;city;street;number;zip;type|prefix|numbertype|prefix|numberstate;city;street;number;zip;type|prefix|numbertype|prefix|number
but when using the framework i have the following output:
name,surname,state;city;street;number;zip;type|prefix|numbertype|prefix|number,state;city;street;number;zip;type|prefix|numbertype|prefix|number
in details are missing:
"|" separetor between number and type fileld.
Could you help me to understand what is wrong in my mapping?
There is a way to insert a "," (comma) separator between number and state? (the last field of phone structure and first field of address structure?
These are the input and the mapping.
input: <root> <customer> <name>name</name> <surname>surname</surname> <addresses> <address> <state>state</state> <city>city</city> <street>street</street> <number>number</number> <zipCode>zip</zipCode> <phones> <phone> <type>type</type> <prefix>prefix</prefix> <number>number</number> </phone> <phone> <type>type</type> <prefix>prefix</prefix> <number>number</number> </phone> </phones> </address> <address> <state>state</state> <city>city</city> <street>street</street> <number>number</number> <zipCode>zip</zipCode> <phones> <phone> <type>type</type> <prefix>prefix</prefix> <number>number</number> </phone> <phone> <type>type</type> <prefix>prefix</prefix> <number>number</number> </phone> </phones> </address> </addresses> </customer> </root>
Mapping:
<?xml version="1.0"?>
<sx:resources xmlns:sx="http://www.servingxml.com/core">
<sx:service id="customer"> <sx:recordStream> <sx:subtreeRecordReader> <sx:inverseRecordMapping ref="myMapping"/> <sx:transform> <sx:document/> </sx:transform> </sx:subtreeRecordReader> <sx:flatFileWriter> <sx:flatFile ref="output"/> </sx:flatFileWriter> </sx:recordStream> </sx:service>
<sx:recordContent id="customer"> <sx:flatFileReader> <sx:flatFile ref="output"/> </sx:flatFileReader> <sx:inverseRecordMapping ref="myMapping"/> </sx:recordContent>
<sx:flatFile id="output"> <sx:flatFileBody> <sx:flatRecordType ref="myRecord"/> </sx:flatFileBody> </sx:flatFile>
<sx:flatRecordType id="myRecord" name="myRecord"> <sx:fieldDelimiter value=","/> <sx:delimitedField name="name"/> <sx:delimitedField name="surname"/> <sx:repeatingGroup name="address"> <sx:flatRecordType name="addressRecord"> <sx:fieldDelimiter value=";"/> <sx:delimitedField name="state"/> <sx:delimitedField name="city"/> <sx:delimitedField name="street"/> <sx:delimitedField name="number"/> <sx:delimitedField name="zipCode"/> <sx:repeatingGroup name="phone"> <sx:flatRecordType name="phoneRecord"> <sx:fieldDelimiter value="|"/> <sx:delimitedField name="type"/> <sx:delimitedField name="prefix"/> <sx:delimitedField name="number"/> </sx:flatRecordType> </sx:repeatingGroup> </sx:flatRecordType> </sx:repeatingGroup> </sx:flatRecordType>
<sx:inverseRecordMapping id="myMapping"> <sx:onSubtree path="/root/customer"> <sx:flattenSubtree recordType="customer"> <sx:subtreeFieldMap select="name" field="name"/> <sx:subtreeFieldMap select="surname" field="surname"/> <sx:subtreeFieldMap match="addresses/address" field="address"> <sx:flattenSubtree recordType="addressRecord"> <sx:subtreeFieldMap select="state" field="state"/> <sx:subtreeFieldMap select="city" field="city"/> <sx:subtreeFieldMap select="street" field="street"/> <sx:subtreeFieldMap select="number" field="number"/> <sx:subtreeFieldMap select="zipCode" field="zipCode"/> <sx:subtreeFieldMap match="phones/phone" field="phone"> <sx:flattenSubtree recordType="phoneRecord"> <sx:subtreeFieldMap select="type" field="type"/> <sx:subtreeFieldMap select="prefix" field="prefix"/> <sx:subtreeFieldMap select="number" field="number"/> </sx:flattenSubtree> </sx:subtreeFieldMap> </sx:flattenSubtree> </sx:subtreeFieldMap> </sx:flattenSubtree> </sx:onSubtree> </sx:inverseRecordMapping> </sx:resources>
Regards.
Mauro.
Log in to post a comment.
Goodmorning,
I'm using the 1.1.2 version and I 'have a problem to transfomr an XML input file to a flat file separated.
I expect the following output:
name,surname,state;city;street;number;zip;type|prefix|numbertype|prefix|numberstate;city;street;number;zip;type|prefix|numbertype|prefix|number
but when using the framework i have the following output:
name,surname,state;city;street;number;zip;type|prefix|numbertype|prefix|number,state;city;street;number;zip;type|prefix|numbertype|prefix|number
in details are missing:
"|" separetor between number and type fileld.
Could you help me to understand what is wrong in my mapping?
There is a way to insert a "," (comma) separator between number and state? (the last field of phone structure and first field of address structure?
These are the input and the mapping.
input:
<root>
<customer>
<name>name</name>
<surname>surname</surname>
<addresses>
<address>
<state>state</state>
<city>city</city>
<street>street</street>
<number>number</number>
<zipCode>zip</zipCode>
<phones>
<phone>
<type>type</type>
<prefix>prefix</prefix>
<number>number</number>
</phone>
<phone>
<type>type</type>
<prefix>prefix</prefix>
<number>number</number>
</phone>
</phones>
</address>
<address>
<state>state</state>
<city>city</city>
<street>street</street>
<number>number</number>
<zipCode>zip</zipCode>
<phones>
<phone>
<type>type</type>
<prefix>prefix</prefix>
<number>number</number>
</phone>
<phone>
<type>type</type>
<prefix>prefix</prefix>
<number>number</number>
</phone>
</phones>
</address>
</addresses>
</customer>
</root>
Mapping:
<?xml version="1.0"?>
<sx:resources xmlns:sx="http://www.servingxml.com/core">
<sx:service id="customer">
<sx:recordStream>
<sx:subtreeRecordReader>
<sx:inverseRecordMapping ref="myMapping"/>
<sx:transform>
<sx:document/>
</sx:transform>
</sx:subtreeRecordReader>
<sx:flatFileWriter>
<sx:flatFile ref="output"/>
</sx:flatFileWriter>
</sx:recordStream>
</sx:service>
<sx:recordContent id="customer">
<sx:flatFileReader>
<sx:flatFile ref="output"/>
</sx:flatFileReader>
<sx:inverseRecordMapping ref="myMapping"/>
</sx:recordContent>
<sx:flatFile id="output">
<sx:flatFileBody>
<sx:flatRecordType ref="myRecord"/>
</sx:flatFileBody>
</sx:flatFile>
<sx:flatRecordType id="myRecord" name="myRecord">
<sx:fieldDelimiter value=","/>
<sx:delimitedField name="name"/>
<sx:delimitedField name="surname"/>
<sx:repeatingGroup name="address">
<sx:flatRecordType name="addressRecord">
<sx:fieldDelimiter value=";"/>
<sx:delimitedField name="state"/>
<sx:delimitedField name="city"/>
<sx:delimitedField name="street"/>
<sx:delimitedField name="number"/>
<sx:delimitedField name="zipCode"/>
<sx:repeatingGroup name="phone">
<sx:flatRecordType name="phoneRecord">
<sx:fieldDelimiter value="|"/>
<sx:delimitedField name="type"/>
<sx:delimitedField name="prefix"/>
<sx:delimitedField name="number"/>
</sx:flatRecordType>
</sx:repeatingGroup>
</sx:flatRecordType>
</sx:repeatingGroup>
</sx:flatRecordType>
<sx:inverseRecordMapping id="myMapping">
<sx:onSubtree path="/root/customer">
<sx:flattenSubtree recordType="customer">
<sx:subtreeFieldMap select="name" field="name"/>
<sx:subtreeFieldMap select="surname" field="surname"/>
<sx:subtreeFieldMap match="addresses/address" field="address">
<sx:flattenSubtree recordType="addressRecord">
<sx:subtreeFieldMap select="state" field="state"/>
<sx:subtreeFieldMap select="city" field="city"/>
<sx:subtreeFieldMap select="street" field="street"/>
<sx:subtreeFieldMap select="number" field="number"/>
<sx:subtreeFieldMap select="zipCode" field="zipCode"/>
<sx:subtreeFieldMap match="phones/phone" field="phone">
<sx:flattenSubtree recordType="phoneRecord">
<sx:subtreeFieldMap select="type" field="type"/>
<sx:subtreeFieldMap select="prefix"
field="prefix"/>
<sx:subtreeFieldMap select="number"
field="number"/>
</sx:flattenSubtree>
</sx:subtreeFieldMap>
</sx:flattenSubtree>
</sx:subtreeFieldMap>
</sx:flattenSubtree>
</sx:onSubtree>
</sx:inverseRecordMapping>
</sx:resources>
Regards.
Mauro.