Difference between revisions of "Function xml.parse()"

From wiki.netio-products.com
Jump to navigation Jump to search
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{DISPLAYTITLE:function xml.check()}}
 
{{DISPLAYTITLE:function xml.check()}}
 
Parses xml string.
 
Parses xml string.
  <i>XmlElement</i> <b>xml.parse</b>(<code>xmlstring</code>)
+
  <i>XmlElement</i> <b>xml.parse</b>(<i>string</i> <code>xml</code>)
  
 
=== Parameters ===
 
=== Parameters ===
* <i>string</i> <code>xmlstring</code> string to parse
+
* <i>string</i> <code>xml</code> string to parse
  
 
=== Return value ===
 
=== Return value ===
Line 11: Line 11:
 
Consecutive spaces are trimmed to single space.
 
Consecutive spaces are trimmed to single space.
  
=== XmlElement Members ===
+
== XmlElement ==
* <i>string</i> <code>name</code> name of the node
+
 
 +
=== <i>string</i> <code>name</code> ===
 +
name of the node
 
  log(xml.parse("<note>something</note>").name) -- note
 
  log(xml.parse("<note>something</note>").name) -- note
* <i>string</i> <code>text</code> text content of the node (excluding the contents of child nodes)
+
 
 +
=== <i>string</i> <code>text</code> ===
 +
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 &lt;big>really&lt;/big> good</note>")
 
  local data = xml.parse("<note>something &lt;big>really&lt;/big> good</note>")
 
  log(data.text) -- something good
 
  log(data.text) -- something good
* <i>string/nil</i> <code>attr(<i>string</i> name)</code> returns the value of a single attribute; if the attribute doesn't exists, ruturns <i>nil</i>
+
 
 +
=== <i>string/nil</i> <code>attr(<i>string</i> name)</code> ===
 +
returns the value of a single attribute; if the attribute doesn't exists, ruturns <i>nil</i>
 
  local data = xml.parse('<note from="ann" to="bob">hello</note>')
 
  local data = xml.parse('<note from="ann" to="bob">hello</note>')
 
  log(data.attr("from")) -- ann
 
  log(data.attr("from")) -- ann
* <i>table</i> <code>attr()</code> returns all attributes as a table
+
 
 +
=== <i>table</i> <code>attr()</code> ===
 +
returns all attributes as a table
 
  local data = xml.parse('<note from="ann" to="bob">hello</note>')
 
  local data = xml.parse('<note from="ann" to="bob">hello</note>')
 
  local attrs = data.attr()
 
  local attrs = data.attr()
 
  logf("%s -> %s", attrs.from, attrs["to"]) -- ann -> bob
 
  logf("%s -> %s", attrs.from, attrs["to"]) -- ann -> bob
* <i>XmlElement</i> <code>child(<i>string</i> name)</code> returns first child node with given name
+
 
 +
=== <i>XmlElement/nil</i> <code>child(<i>string</i> name)</code> ===
 +
returns first child node with given name, nil if no such element is found
 
  local data = [[
 
  local data = [[
 
   <papers>
 
   <papers>
Line 35: Line 45:
 
  log(parsed.child("book").text) -- Bible
 
  log(parsed.child("book").text) -- Bible
  
__NOTOC__
+
=== <i>array</i> <code>children(optional <i>string</i> name)</code> ===
 +
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
 +
 
 +
===<i>XmlElement/nil</i> <code>get(<i>string/number</i>...)</code> ===
 +
traverses the xml tree and filters the result for each argument:
 +
* <i>string</i> descend into first node of given name
 +
* <i>number</i> 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
 +
 
 +
=== <i>XmlElement/nil</i> <code>next</code> ===
 +
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
 +
 
 +
=== <i>string</i> <code>xml</code> ===
 +
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>
 +
 
 +
=== <i>string</i> <code>innerXml</code> ===
 +
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>
 +
 
 +
=== <i>XmlElement/nil</i> <code>parent</code> ===
 +
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
 +
 
 +
=== <i>XmlElement/nil</i> <code>root</code> ===
 +
root node (nil for root)

Latest revision as of 18:20, 5 May 2017

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)