[OpenSIPS-Users] How to parse XML Body?

Bogdan-Andrei Iancu bogdan at opensips.org
Tue Jan 17 09:12:26 EST 2017


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>; asd asd 
> <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/20170117/95a76c66/attachment-0001.html>


More information about the Users mailing list