Logic Machine Forum
XML - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: XML (/showthread.php?tid=3043)



XML - tomnord - 02.12.2020

Hi. How would one go about extracting data from an XML like this?

Code:
String: <?xml version=”1.0″ encoding=”UTF-8″?><sbn_rd xmlns=”http://www.ibsiberia.com/schemas/sbn_rd” version=”1″><event id=”1476139372″ protocol=”CID”><account>2034</account><code>E130</code><zone>1</zone><area>1</area></event></sbn_rd>



RE: XML - admin - 03.12.2020

Use this:
Code:
function starttag(p, tag, attrs)
  if tag == 'event' then
    eventdata = attrs
  elseif not done and eventdata then
    ctag = tag
  end
end

function endtag(p, tag)
  if tag == 'event' then
    done = true
  elseif tag == ctag then
    ctag = nil
  end
end

function text(p, tdata)
  if ctag then
    eventdata[ ctag ] = tdata:trim()
  end
end

data = '<?xml version="1.0" encoding="UTF-8"?><sbn_rd xmlns="http://www.ibsiberia.com/schemas/sbn_rd" version="1"><event id="1476139372" protocol="CID"><account>2034</account><code>E130</code><zone>1</zone><area>1</area></event></sbn_rd>'

require('lxp').new({
  StartElement = starttag,
  EndElement = endtag,
  CharacterData = text,
}):parse(data)

log(eventdata)

It will produce a table containing all the event data:
Code:
* table:
[1]
  * string: id
[2]
  * string: protocol
["area"]
  * string: 1
["code"]
  * string: E130
["account"]
  * string: 2034
["protocol"]
  * string: CID
["id"]
  * string: 1476139372
["zone"]
  * string: 1