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&#x20Id'"/>


-- 


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

Reply via email to