minixml
is a package for building xml documents in R.
minixml
vs xml2
xml2
is a fantastic package for parsing a pre-existing XML file and navigating through it, slicing it etc.
minixml
is focussed on creating XML documents by assembling nodes with attributes in a programmatic fashion.
Need to build | R6 object | alternate initialisation |
---|---|---|
XML elements | XMLElement$new() |
xml_elem() |
XML document | XMLDocument$new() |
xml_doc() |
XML Entity | code | result |
---|---|---|
XML elements | XMLElement$new('info', "Hello there") |
<info>Hello there</info> |
XML elements | xml_elem('info', 'Hello')$update(date = '2019') |
<info date="2019">Hello</info> |
XML document | this_xml <- XMLDocument$new('core'); this_xml$add('info', 'hello') |
<core><info>hello</info></core> |
You can install minixml
from GitHub with:
new_elem <- XMLElement$new('info', type = 'meta')
new_elem <- xml_elem('info', type = 'meta')
doc <- XMLDocument$new('xx'); new_elem <- doc$add('info', type = 'meta')
elem <- XMLElement$new('xxx'); new_elem <- elem$add('info', type = 'meta')
$add()
creates an element and adds it to the parent (and returns it)
new_elem <- doc$add('info', type = 'meta')
$append()
appends the given elements as children
new_elem <- xml_elem('info', type = 'meta'); doc$append(new_elem, ...)
$new(name, ...)
, $update(...)
and $add(name, ...)
all accept ...
where
doc <- xml_elem("thing")
doc$add('node')$
update(style = "color: blue;")$
add('mytag', "Some example text.")
doc
<thing>
<node style="color: blue;">
<mytag>
Some example text.
</mytag>
</node>
</thing>
minixml
documentminixml
uses xml2
to parse XML text (or file) into a minixml
document.
my_xml <- "<eg>Node contents</eg>"
doc <- minixml::parse_xml_elem(my_xml)
doc$update(x = 1, y = 2)$
add(name = 'inner', 'inner contents')
doc
<eg x="1" y="2">
Node contents
<inner>
inner contents
</inner>
</eg>
X3D
3d objectX3D is an XML-based 3D object format that is the successor to VRML.
In this example, we’ll build a simple 3D cube to view in the browser.
x3d <- xml_elem("x3d", width = "300px", height="200px")
shape <- x3d$
add("scene")$
add("shape")
shape$add("appearance")$add("material", diffuseColor = "0 0 1")
shape$add("box")
x3d
<x3d width="300px" height="200px">
<scene>
<shape>
<appearance>
<material diffuseColor="0 0 1" />
</appearance>
<box />
</shape>
</scene>
</x3d>