[OpenSIPS-Users] How to parse XML Body?

Bogdan-Andrei Iancu bogdan at opensips.org
Thu Jan 19 05:53:41 EST 2017


Hi,

To be honest I'm not good on perl, but if you can do it directly at 
script level, it it cleaner and more efficient.

Also, check this 
https://github.com/OpenSIPS/opensips/commit/d509aa63698bc26fde390a4b707dbf2be31f5de5

Thanks and Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 01/18/2017 04:09 PM, xaled wrote:
>
> Hi Bogdan,
>
> works like a charm, thanks!
>
> As an additional bonus now I know how to work with the perl module ;)
>
> $rb(mime)[idx] is even more flexible.
>
> *From:*Bogdan-Andrei Iancu [mailto:bogdan at opensips.org]
> *Sent:* Dienstag, 17. Januar 2017 15:12
> *To:* xaled <xaled at web.de>; 'OpenSIPS users mailling list' 
> <users at lists.opensips.org>
> *Subject:* Re: [OpenSIPS-Users] How to parse XML Body?
>
> Hi,
>
> There was a small typo in my regexp. The correct one is:
>
> $var(reg) = "/(.*)gml:Coordinates>(.*)<\/gml:Coordinates(.*)/\2/s";
> xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");
>
> I tried it and it does the job.
>
> Regarding the usability of the $rb variable, yes you have a point. I 
> was thinking of something like $rb(mime)[idx] to access also per mime.
>
> Best regards,
>
>
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developer
> http://www.opensips-solutions.com
>
> On 01/13/2017 12:04 PM, xaled wrote:
>
>     Hi Bogdan,
>
>     thank you for looking at this issue. This regex does not work. I
>     tried different combinations of the idea but it just not getting
>     there.
>
>     2017-01-13T11:02:42.287766+01:00 ivr01
>     /usr/local/sbin/opensips[24845]: DBG:core:tr_eval_re: we must
>     compile the regexp
>
>     2017-01-13T11:02:42.288116+01:00 ivr01
>     /usr/local/sbin/opensips[24845]: WARNING:core:parse_repl: \/
>     unknown escape in (.*)<\/gml:Coordinates(.*)/\2/s
>
>     2017-01-13T11:02:42.288464+01:00 ivr01
>     /usr/local/sbin/opensips[24845]: ERROR:core:subst_parser: unknown
>     flag . in (.*)/gml:Coordinates>(.*)<\/gml:Coordin
>
>     ates(.*)/\2/s
>
>     2017-01-13T11:02:42.288787+01:00 ivr01
>     /usr/local/sbin/opensips[24845]: ERROR:core:tr_eval_re: Can't
>     compile regexp
>
>     I managed to get it running with perl:
>
>     use OpenSIPS qw ( log );
>
>     use OpenSIPS::Constants;
>
>     use OpenSIPS::Message;
>
>     sub parsePIDFLO {
>
>     my $m = shift;
>
>     my $body = $m->getBody();
>
>     ($coord) = $body =~ /Coordinates>(.*)</;
>
>     my ($long, $lat) = split( /\s+/, $coord );
>
>     Btw it would be great to be able to address the xml body by
>     something like this:
>
>     rb[application/pidf+xml] or rb["application/pidf+xml"] otherwise
>     if bodies come in different order rb[1] would not work.
>
>     Thanks
>
>     *From:*Bogdan-Andrei Iancu [mailto:bogdan at opensips.org]
>     *Sent:* Mittwoch, 11. Januar 2017 11:05
>     *To:* OpenSIPS users mailling list <users at lists.opensips.org>
>     <mailto:users at lists.opensips.org>; asd asd <xaled at web.de>
>     <mailto:xaled at web.de>
>     *Subject:* Re: [OpenSIPS-Users] How to parse XML Body?
>
>     Hi,
>
>     Please try
>
>     $var(reg) = "(.*)/gml:Coordinates>(.*)<\/gml:Coordinates(.*)/\2/s";
>     xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");
>
>     Regards,
>
>
>     Bogdan-Andrei Iancu
>
>     OpenSIPS Founder and Developer
>
>     http://www.opensips-solutions.com
>
>     On 01/06/2017 05:44 PM, xaled wrote:
>
>         Hi Bogdan,
>
>         can you give any hints on how to get the Coordinates values
>         and not the whole xml body from the regex subst?
>
>         Sorry for being not clever enough to figure it out myself.
>
>         Thanks
>
>         Hi Bogdan,
>
>         $var(reg) = "/gml:Coordinates>(.*)<\/gml:Coordinates/\1/";
>
>         xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");
>
>         DBG:core:subst_run:matched shows the needed XML element with
>         value, but not the value alone. The xlog output shows the
>         whole XML body without gml:Coordinates.
>
>         2017-01-05T13:23:23.104982+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:tr_eval_re: Trying to
>         apply reg
>
>         exp [/gml:Coordinates>(.*)<\/gml:Coordinates/\1/] on : [<?xml
>         version="1.0" encoding="UTF-8"?>#015#012<presence xml
>
>         ns="urn:ietf:params:xml:ns:pidf"
>         xmlns:gp="urn:ietf:params:xml:ns:pidf:geopriv10"
>         xmlns:gml="urn:opengis:specificat
>
>         ion:gml:schema-xsd:feature:v3.0"
>         entity="pres:sip:+1234567 at test.com"
>         <mailto:pres:sip:+1234567 at test.com>>#015#012 <tuple
>         id="PDT">#015#012  <s
>
>         tatus>#015#012 <gp:geopriv>#015#012 <gp:location-info>#015#012
>         <gml:location>#015#012      <gml:Point gml:
>
>         id="point1" srsName="epsg:4346">#015#012
>         <gml:Coordinates>12.32 34.24</gml:Coordinates>#015#012     
>         </gml:P
>
>         oint>#015#012 </gml:location>#015#012
>         </gp:location-info>#015#012 <gp:usage-rules>#015#012    
>         <gp:retran
>
>         smission-allowed>no</gp:retransmission-allowed>#015#012
>         <gp:retention-expiry />#015#012 </gp:usage-rules>#01
>
>         5#012   </gp:geopriv>#015#012 </status>#015#012
>         <timestamp>2016-8-02T04:13:23Z</timestamp>#015#012 </tuple>#015#0
>
>         12</presence>#015#012#015#012]
>
>         2017-01-05T13:23:23.107376+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:tr_eval_re: we must
>         compile the
>
>         regexp
>
>         2017-01-05T13:23:23.107903+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:subst_parser: ok, se
>         is 0x7f39a
>
>         5d0a1f0
>
>         2017-01-05T13:23:23.108241+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:subst_run: running. r=0
>
>         2017-01-05T13:23:23.111918+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:subst_run: matched
>         (404, 45): [
>
>         gml:Coordinates>12.32 34.24</gml:Coordinates]
>
>         2017-01-05T13:23:23.112380+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: DBG:core:buf_init: initializing...
>
>         2017-01-05T13:23:23.112730+01:00 ivr01
>         /usr/local/sbin/opensips[2227]: Position is <?xml
>         version="1.0" encoding
>
>         ="UTF-8"?>#015#012<presence
>         xmlns="urn:ietf:params:xml:ns:pidf"
>         xmlns:gp="urn:ietf:params:xml:ns:pidf:geopriv10" xm
>
>         lns:gml="urn:opengis:specification:gml:schema-xsd:feature:v3.0"
>         entity="pres:sip:+1234567 at test.com"
>         <mailto:pres:sip:+1234567 at test.com>>#015#0
>
>         12 <tuple id="PDT">#015#012 <status>#015#012  
>         <gp:geopriv>#015#012 <gp:location-info>#015#012     <gml:locatio
>
>         n>#015#012      <gml:Point gml:id="point1"
>         srsName="epsg:4346">#015#012 <12.32 34.24>#015#012      </gml:Poi
>
>         nt>#015#012 </gml:location>#015#012
>           </gp:location-info>#015#012 <gp:usage-rules>#015#012    
>         <gp:retransm
>
>         ission-allowed>no</gp:retransmission-allowed>#015#012
>         <gp:retention-expiry />#015#012 </gp:usage-rules>#015#
>
>         012   </gp:geopriv>#015#012 </status>#015#012
>         <timestamp>2016-8-02T04:13:23Z</timestamp>#015#012
>         </tuple>#015#012
>
>         </presence>
>
>         Thanks
>
>         *From:*Bogdan-Andrei Iancu [mailto:bogdan at opensips.org]
>         *Sent:* Donnerstag, 5. Januar 2017 13:12
>         *To:* OpenSIPS users mailling list <users at lists.opensips.org
>         <mailto:users at lists.opensips.org>>; xaled <xaled at web.de
>         <mailto:xaled at web.de>>
>         *Subject:* Re: [OpenSIPS-Users] How to parse XML Body?
>
>         Try $var(reg) = "/gml:Coordinates>(.*)<\/gml:Coordinates/\1/";
>
>
>
>
>
>
>
>         _______________________________________________
>
>         Users mailing list
>
>         Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>
>         http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20170119/2e94d2b9/attachment-0001.html>


More information about the Users mailing list