My XML :
<root>
<row>
<name>ABC</name>
<contacts> C1 <abc#abc.com> C2 <xyz#xyz.com> </contacts>
</row>
<root>
When i start parsing
It will be break after C1 string. Coz it got < element. and give me error like here,
parser error : Error Domain=NSXMLParserErrorDomain Code=68 "The
operation couldn’t be completed. (NSXMLParserErrorDomain error 68.)"
UserInfo=0x143e3ba0 {NSXMLParserErrorLineNumber=1,
NSXMLParserErrorColumn=966, NSXMLParserErrorMessage=error parsing
attribute name }
The question seems be easy, But its not.
Please response with your best solution.
Related
I'm having trouble getting a simple transformation for XML to work in ABAP. I keep getting the exception cx_st_match_element when I try to execute it on a test XML document inside of a report.
I have the following XML that I want to transform into an ABAP internal table:
<?xml version="1.0" encoding="UTF-8"?>
<studenten xmlns="http://www.foo.be/bar/preinschrijvingsflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.foo.be/bar/preinschrijvingsflow bar_studenten.xsd">
<student>
<barGuid>1</barGuid>
<familienaam>Doe</familienaam>
<voornaam>John</voornaam>
<geslacht>1</geslacht>
<nationaliteit>BE</nationaliteit>
<geboortedatum>1995-11-18</geboortedatum>
<geboorteplaats>Antwerpen</geboorteplaats>
<email>John.Doe#gmail.com</email>
<straatNummer>Grote Markt 1 bus 0102</straatNummer>
<postcode>1000</postcode>
<gemeente>Brussel</gemeente>
<land>BE</land>
<telefoonnummer>+32123456789</telefoonnummer>
<academiejaar>2021</academiejaar>
</student>
</studenten>
To this end I defined the following simple transformation I called zc_tr_student:
<?sap.transform simple?>
<tt:transform
xmlns="http://www.foo.be/bar/preinschrijvingsflow"
xmlns:tt="http://www.sap.com/transformation-templates"
xmlns:ddic=" http://www.sap.com/abapxml/types/dictionary">
<tt:root name="studenten" type="ddic:ZCTT_bar_STUDENT"/>
<tt:template>
<studenten>
<tt:loop ref=".studenten" name="studenten">
<student>
<barGuid tt:value-ref="$studenten.bar_guid"/>
<familienaam tt:value-ref="$studenten.familienaam"/>
<voornaam tt:value-ref="$studenten.voornaam"/>
<geslacht tt:value-ref="$studenten.geslacht"/>
<nationaliteit tt:value-ref="$studenten.nationaliteit"/>
<geboortedatum tt:value-ref="$studenten.geboortedatum"/>
<geboorteplaats tt:value-ref="$studenten.geboorteplaats"/>
<email tt:value-ref="$studenten.email"/>
<straat_nummer tt:value-ref="$studenten.straat_nummer"/>
<postcode tt:value-ref="$studenten.postcode"/>
<gemeente tt:value-ref="$studenten.gemeente"/>
<land tt:value-ref="$studenten.land"/>
<telefoonnummer tt:value-ref="$studenten.telefoonnummer"/>
<academiejaar tt:value-ref="$studenten.academiejaar"/>
</student>
</tt:loop>
</studenten>
</tt:template>
</tt:transform>
In the tt:value-refattributes I refer to the field in the DDIC line type of the ABAP internal table corresponding to the tag in the XML.
If I call this simple transformation from an ABAP report like this:
call transformation zc_tr_student
source xml lv_bxml
result studenten = p_student.
The cx_st_match_element is thrown.
I validated both the syntax of the file and its adherence to the schema. The XML file and the XSD file are present in the same directory on the application server. I have no idea why the ST fails as the cx_st_match_element instance does not have any useful information except that it expected a studenten element. That element is clearly present in the XML file as the root element.
I'm inexperienced with defining simple transformations and I can't spot my error myself. Thank you in advance for your help,
Joshua
This question already has an answer here:
How to compare XML response with Json in Karate
(1 answer)
Closed 1 year ago.
I've noticed that "match contains" for checking if xml structure contains in another xml structure works differently than json counterpart. To give you an example :
* def expectedResult =
"""
<?xml version="1.0" encoding="UTF-8"?>
<response>
<id>1</id>
<id>2</id>
<id>3</id>
</response>
"""
* header Accept = xml
Given path 'some\path'
When method GET
Then status 200
## If response contains -
## <response><id>1</id></response>
## The following match will fail with -
## "actual and expected arrays are not the same size - 1:3"
And match response contains expectedResult
If it's a JSON structure, it will pass because 1 contains in the list of 1,2,3. But in XML, it's still checking array size. Is that how it suppose to work?
Update : This is not the same question as the other question. I'm trying to compare reference XML file that I have with XML structure being returned from the API. The question you linked to is comparing JSON reference file to XML response. So, that begs the question, in karate, do I have to convert my reference XML and response XML to json just to perform "contains"?
XML has some fundamental "shape" differences from JSON. I leave it to you to figure out, one of the challenges is the concept of a "root" tag, which JSON does not have. So they will not "match up" the way you may expect.
One tip - convert XML to JSON if in doubt. Here is an example:
* def expected =
"""
<?xml version="1.0" encoding="UTF-8"?>
<response>
<id>1</id>
<id>2</id>
<id>3</id>
</response>
"""
* json temp = $expected/response
* match temp.response.id == ['1', '2', '3']
My response data is having text in it.
I am not able to get data from any of the fields using xpath from this response.
Karate shows "xml parsing failed, response data type set to string: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 716; The entity "nbsp" was referenced, but not declared." all xpaths
(Eg: response/transaction/values/data/#name)
I need to verify the commentDisplay tag in below xml. How to proceed?/ Is there any way to remove before fetching the value using xpath?
<Response>
<RequestID>1234</RequestID>
<transaction>
<values>
<data name="firstName">Sumith</data>
<data name="lastName">Menon</data>
</values>
<commentDisplay>
<top>Please Verify IDCard</top>
<bottom/></commentDisplay>
</transaction>
</Response>
is invalid in XML, refer: https://stackoverflow.com/a/36097922/143475
But you can correct this in one step:
* xml response = response.replaceAll(' ', ' ')
I'm new to mule, working with Matamapper which converts csv file to xml. I'm able to convert csv to xml . But the final output response is not formatted with actual root element. Please find my final output xml structure. It doesnt have root element. Kindly guide me . If this is correct, help me how to insert root element. ( Bcz i tried Set payload to insert the root element) it is not working correclty.
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<name>jothi</name>
<street>123, main</street>
</employees>
<employees>
<name>Jane </name>
<street>Main Street</street>
</employees>
Also referred : csv to xml: not sure the best way to do it in Mule ESB
http://www.mulesoft.org/documentation/display/current/DataMapper+Flat-to-Structured+and+Structured-to-Flat+Mapping - giving errors in datamapper
Thank you.
Upgrading MuleStudio to 3.5 cleaned up a lot of the errors I was seeing using the DataMapper
Here is a XML file:
<ROOT>
<A>
<B>2</B>
<C>3</C>
<D>4</D>
</A>
</ROOT>
How to get the tag name "C" through xPath. The function name() does not work here in extract.
It reports Errors:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token
gXmlDOM is the xml string above, how to do this in SQL?
select XMLType(gXmlDOM).extract(p_xmlPath).getStringVal() from dual;
This might be what you're looking for...
Select xmltype('<ROOT><A><B>2</B><C>3</C><D>4</D></A></ROOT>')
.extract('ROOT/A/*[2]')
.getrootelement()
From dual;