A module for accessing XML data This module currently implements XML, XPath, XSLT (including some EXSLT extensions), XML Namespaces and a simple interface for modifying XML data.builtin xml_parse(xml_text);
This function parses the XML text passed as parameter and returns an XML
document handler. This document handler can then be used to access the
data in the XML file using XPATH queries. The XPATH queries are used like
array indexes:
var xmldoc = xml_parse(file_read("demo.xml"));
foreach[] i (xmldoc["//@*"].nodes)
debug "Attribute '$i' has the value '${xmldoc[i].data}'.";
Virtual member variables (.nodes and .data in the example above) are used
to specify what kind of data should be accessed. The following virtual
member variables are defined for read accesses:
.nodes
Returns an array with references to all nodes in the XML
tree which do match the XPATH query. This references are
auto-generated unique identifiers for the nodes which are
accepted as array indexes just like xpath queries.
(The 'i' variable in the example above.)
.node
Only the first matching node.
.type
The type of the XML node (e.g. "element", "attribute",
"text", "cdata", etc).
.name
The name of the XML node (for element and attribute nodes).
.path
An auto-generated xpath query to this XML node.
.data
The data associated with the first matching XML node. This
is the content if the match is an element node or text node
and the value if the match is an attribute node.
.xml
The XML text of the first matching XML node and its child
nodes.
.innerxml
The XML text of the child nodes of the first matching XML
node.
This member variables (except the .nodes variable) do only use the first
match. It is possible to specify a seperator using an additional virtual
index. Then all matches are included in the result set, seperated by the
specified seperator:
debug "All attributes: ${xmldoc["//@*"].data.[", "]}";
The following virtual memeber variables are supported for writing:
.data
.xml
.innerxml
This variables are also available for writing and have
the same meaning as for read accesses.
.add_xml_before
.add_xml_after
This adds new XML text before or after the found matches.
.add_xml_top
.add_xml_bottom
This adds new XML text as new child nodes before of after
the child nodes of the found matches.
All write queries modify each found match. In cases such as the following
example you need to use an iterator because it contains a combined
read/write access. Without the iterator, the regex would read the first
match, do the substitution once and write the result to all matches:
foreach[] i (xmldoc["//@year"].nodes)
xmldoc[i] =~ s/2004/2005/;
The default behavior - if no virtual member varable is specified - is the
behavior of the .data variable.
It is also possible to remove XML nodes using the 'delete' SPL keyword:
delete xmldoc["//record[@year < 2005]"];
The 'node handlers' returned by the .nodes and .node variables can also
be used directly to make relative xpath queries. So the following two
code snippets are identical:
foreach[] n (xmldoc["//data"].nodes)
debug xmldoc["$n/@value"];
foreach[] n (xmldoc["//data"].nodes)
debug n["@value"];
Check out the documents on www.w3.org for a detailed description of XML
and the XPath query language.
This function expects an XML document handler (as returned by xml_parse) as parameter and creates XML text from it. The xml is dumped with indenting spaces if the named parameter 'format' is passed and has a 'true' (non-zero) value.
builtin xml_xslt_text(xmldoc, stylesheet, %params);
This function performs an XSLT transformation:
var xmldoc = xml_parse(file_read("demo.xml"));
var stylesheet = xml_parse(file_read("demo.xsl"));
debug xml_xslt_text(xmldoc, stylesheet, foo: "'bar'");
The first parameter is the handler of XML document to be transformed, as
returned by xml_parse(). The 2nd parameter is the XML document
handler for the XSLT stylesheet.
Parameters for the stylesheet are passed as named function parameters. Note
that the parameters are XPath expressions. I.e. a string constant needs to
be passed with quotes.
The return value is the XML text after the transformation.
builtin xml_xslt_xml(xmldoc, stylesheet, %params);
This function works exactly like xml_xslt_text, but it returns a new XML document handler.
An instance of this object is thrown on XML parser errors.
var XmlEx.description;
A description text describing the error.
| Generated by SPLDOC. | http://www.clifford.at/spl/ |