FWIW, XML also requires attributes to have the =”” part. Looks like we are using a buggy JSON-XML conversion library if it’s generating malformed XML. If our XPath is working on that at all it’s also buggy. There is no convention in XML itself for escaping spaces in names, it will have to be a convention of (a proper) conversion algorithm.
If it were me I’d try a workaround transforming the spaces to underscores or something in the JSON before converting it to XML, and file some JIRAs on the buggy conversion algorithm. -Jonathan *From:* Dev [mailto:[email protected]] *On Behalf Of *Rasika Perera *Sent:* Monday, March 07, 2016 11:34 AM *To:* Udara Liyanage *Cc:* WSO2 Developers' List *Subject:* Re: [Dev] Xpath expression to fetch a property which has space in name Hi Udara, According to the W3C XML 1.0 Specification <https://www.w3.org/TR/REC-xml/#sec-common-syn> you *cannot* have spaces on the XML element name. To be precise; [4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] [5] Name ::= NameStartChar (NameChar)* However; As I feel when there are XML element names with *spaces* the second word is treated as an *attribute* to the XML element. eg. <Employee Id> would be treated as; <Employee Id=""> Therefore; Can you try; "<property name="test" expression="*//Employee[@Id]*'"/>" which should do the trick. Thanks, ~Rasika On Mon, Mar 7, 2016 at 2:55 PM, Udara Liyanage <[email protected]> wrote: Hi, It gives me following error. Below is my synapse configs. ##call external api <call> <endpoint> <http method="POST" uri-template=" https://api.peoplehr.net/Query"/> </endpoint> </call> #iterate thru results <iterate id="iter1" expression="//Result"> <target> <sequence> <log level="custom"> <property name="test" expression="*json-eval($.Employee Id)*"/> </log> Sample API call output { "Message": "The requested processed successfully.", "Result": [ { "Department": "HUMAN RESOURCES AND ADMINISTRATION", "Employee Id": "456", }, { "Department": "MARKETING", "Employee Id": "123", }, JsonUtil #toJsonStream. Could not create input stream from XML element [<Result><Employee Id>123</Employee Id><Department>ENGINEERING</Department></Result>]. Error>>> Could not convert OMElement to JSON. Invalid XML payload. On Mon, Mar 7, 2016 at 2:42 PM, Keerthika Mahendralingam <[email protected]> wrote: Hi Udara, Since you are getting JSON response, I think you can use json-eval to get the value form response like, <property name="id" expression="json-eval($.Employee Id)"/> Thanks, On Mon, Mar 7, 2016 at 2:31 PM, Udara Liyanage <[email protected]> wrote: Hi, We have an call mediator which calls and external API. API response is json. Json properties has spaces in names. { "Department": "ENGINEERING", "Employee Id": "LK", "First Name": "Udara", } ESB converts this to xml, those xml element names also have space in element name. On Mon, Mar 7, 2016 at 2:05 PM, Udara Liyanage <[email protected]> wrote: Hi, Below is the log mediator output. Even the converted xml tag has space in its name. [2016-03-07 14:00:36,587] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:2b6e4e6d-9180-4083-b06b-d12c08c5178e, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/ "><soapenv:Body><Result>*<Employee Id>*123*</Employee Id>*<First Name>udara</First Name><Last Name>liyanage</Last Name></Result></soapenv:Body></soapenv:Envelope> On Mon, Mar 7, 2016 at 12:06 PM, Udara Liyanage <[email protected]> wrote: Hi Thusitha, I already tried that, but negative. On Mon, Mar 7, 2016 at 11:59 AM, Thusitha Thilina Dayaratne < [email protected]> wrote: Hi Udara, Did you tried replace the space with "_x0020_"? according to the [1] it seems work for spaces [1] - *http://users.jackrabbit.apache.narkive.com/r9aFPfiI/xpath-query-with-space-in-node-name <http://users.jackrabbit.apache.narkive.com/r9aFPfiI/xpath-query-with-space-in-node-name>* Thanks On Mon, Mar 7, 2016 at 11:43 AM, Udara Liyanage <[email protected]> wrote: Hi, I am trying to fetch an property value from a json payload similar to below. { "Department": "ABC", "Employee Id": "123", "Work Email": "[email protected]" }, I could extract Department value by below xpath expression. <property name="test" expression="//Department'"/> However when I found difficulties when the property name contains an space in middle. I tried few options which were not successful. What is the correct way to escape space character. <property name="test" expression="//'Employee${nbsp}Id'"/> <property name="test" expression="//'Employee Id'"/> -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897 _______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev -- Thusitha Dayaratne Software Engineer WSO2 Inc. - lean . enterprise . middleware | wso2.com Mobile +94712756809 Blog alokayasoya.blogspot.com About http://about.me/thusithathilina -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897 -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897 -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897 _______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev -- Keerthika Mahendralingam Associate Software Engineer Mobile :+94 (0) 776 121144 [email protected] WSO2, Inc. lean . enterprise . middleware -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897 _______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev -- With Regards, *Rasika Perera* Software Engineer M: +94 71 680 9060 E: [email protected] LinkedIn: http://lk.linkedin.com/in/rasika90 WSO2 Inc. www.wso2.com lean.enterprise.middleware
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
