Function xml.parse()

From wiki.netio-products.com
Jump to navigation Jump to search

Parses xml string.

XmlElement xml.parse(string xml)

Parameters

  • string xml string to parse

Return value

XmlElement

Consecutive spaces are trimmed to single space.

XmlElement

string name

name of the node

log(xml.parse("<note>something</note>").name) -- note

string text

text content of the node (excluding the contents of child nodes). To read all content as a text, use .innerXml (see below)

local data = xml.parse("<note>something <big>really</big> good</note>")
log(data.text) -- something good

string/nil attr(string name)

returns the value of a single attribute; if the attribute doesn't exists, ruturns nil

local data = xml.parse('<note from="ann" to="bob">hello</note>')
log(data.attr("from")) -- ann

table attr()

returns all attributes as a table

local data = xml.parse('<note from="ann" to="bob">hello</note>')
local attrs = data.attr()
logf("%s -> %s", attrs.from, attrs["to"]) -- ann -> bob

XmlElement/nil child(string name)

returns first child node with given name, nil if no such element is found

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
]]
local parsed = xml.parse(data)
log(parsed.child("book").text) -- Bible

array children(optional string name)

returns all child nodes; if name is provided, the nodes are filtered by the name

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
]]
local parsed = xml.parse(data)
log(parsed.children("book")[2].text) -- Quran
log(parsed.children()[2].text) -- Automoto Revue

XmlElement/nil get(string/number...)

traverses the xml tree and filters the result for each argument:

  • string descend into first node of given name
  • number descend into n-th node of name specified by previous argument
local data = [[
<root>
  <papers>
    <book>Bible</book>
  </papers>
  <papers>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
</root>
]]
local parsed = xml.parse(data)
log(parsed.get("papers",2,"book").text) -- Quran

XmlElement/nil next

next sibling node of the same name

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
]]
local parsed = xml.parse(data)
log(parsed.child("book").next.text) -- Quran

string xml

inner xml of parent XmlElement

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
]]
local parsed = xml.parse(data)
log(parsed.child("book").xml)
-- <book>Bible</book> <magazine>Automoto Revue</magazine> <book>Quran</book>

string innerXml

inner xml of parent XmlElement

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <book>Quran</book>
  </papers>
]]
local parsed = xml.parse(data)
log(parsed.innerXml)
-- <book>Bible</book> <magazine>Automoto Revue</magazine> <book>Quran</book>

XmlElement/nil parent

parent node

local data = [[
  <papers>
    <book>Bible</book>
    <magazine>Automoto Revue</magazine>
    <bool>Quran</bool>
  </papers>
]]
local magazine = xml.parse(data).child("magazine")
log(magazine.parent.name) -- papers

XmlElement/nil root

root node (nil for root)