An internal, updatable DOM object for building XML trees
This is a mutable object (implemented via a closure)
for representing an XML tree, in the same
spirit as xmlOutputBuffer
and xmlOutputDOM
but that uses the internal structures of
libxml.
This can be used to create a DOM that can be
constructed in R and exported to another system
such as XSLT (http://www.omegahat.net/Sxslt/)
xmlTree(tag, attrs = NULL, dtd=NULL, namespaces=list(), doc = newXMLDoc(dtd, namespaces))
tag |
the node or element name to use to create the new top-level node in the tree
or alternatively, an |
attrs |
attributes for the top-level node, in the form of a named character vector. |
dtd |
the name of the external DTD for this document.
If specified, this adds the DOCTYPE node to the resulting document.
This can be a node created earlier with a call to
|
namespaces |
a named character vector with each element giving the name space identifier and the
corresponding URI, \
e.g |
doc |
an internal XML document object, typically created with
|
This creates a collection of functions that manipulate a shared state to build and maintain an XML tree in C-level code.
An object of class
XMLInternalDOM
that extends XMLOutputStream
and has the same interface (i.e. “methods”) as
xmlOutputBuffer
and xmlOutputDOM
.
Each object has methods for
adding a new XML tag,
closing a tag, adding an XML comment,
and retrieving the contents of the tree.
addTag |
create a new tag at the current position, optionally leaving it as the active open tag to which new nodes will be added as children |
closeTag |
close the currently active tag making its parent the active element into which new nodes will be added. |
addComment |
add an XML comment node as a child of the active node in the document. |
value |
retrieve an object representing the
XML tree. See |
add |
degenerate method in this context. |
This is an early version of this function and I need to iron out some of the minor details.
Duncan Temple Lang
z = xmlTree("people", namespaces = list(r = "http://www.r-project.org")) z$setNamespace("r") z$addNode("person", attrs = c(id = "123"), close = FALSE) z$addNode("firstname", "Duncan") z$addNode("surname", "Temple Lang") z$addNode("title", "Associate Professor") z$addNode("expertize", close = FALSE) z$addNode("topic", "Data Technologies") z$addNode("topic", "Programming Language Design") z$addNode("topic", "Parallel Computing") z$addNode("topic", "Data Visualization") z$addNode("topic", "Meta-Computing") z$addNode("topic", "Inter-system interfaces") z$closeTag() z$addNode("address", "4210 Mathematical Sciences Building, UC Davis") z$closeTag() tr <- xmlTree("CDataTest") tr$addTag("top", close=FALSE) tr$addCData("x <- list(1, a='&');\nx[[2]]") tr$addPI("S", "plot(1:10)") tr$closeTag() cat(saveXML(tr$value())) f = tempfile() saveXML(tr, f, encoding = "UTF-8") # Creating a node x = rnorm(3) z = xmlTree("r:data", namespaces = c(r = "http://www.r-project.org")) z$addNode("numeric", attrs = c("r:length" = length(x))) # shows namespace prefix on an attribute, and different from the one on the node. z = xmlTree() z$addNode("r:data", namespace = c(r = "http://www.r-project.org", omg = "http://www.omegahat.net"), close = FALSE) x = rnorm(3) z$addNode("r:numeric", attrs = c("omg:length" = length(x))) z = xmlTree("examples") z$addNode("example", namespace = list(r = "http://www.r-project.org"), close = FALSE) z$addNode("code", "mean(rnorm(100))", namespace = "r") x = summary(rnorm(1000)) d = xmlTree() d$addNode("table", close = FALSE) d$addNode("tr", .children = sapply(names(x), function(x) d$addNode("th", x))) d$addNode("tr", .children = sapply(x, function(x) d$addNode("td", format(x)))) d$closeNode() cat(saveXML(d)) # Dealing with DTDs and system and public identifiers for DTDs. # Just doctype za = xmlTree("people", dtd = "people") ### www.omegahat.net is flaky # no public element zb = xmlTree("people", dtd = c("people", "", "http://www.omegahat.net/XML/types.dtd")) # public and system zc = xmlTree("people", dtd = c("people", "//a//b//c//d", "http://www.omegahat.net/XML/types.dtd"))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.