findXInclude {XML} | R Documentation |
This function is used to traverse the ancestors of an internal XML node to find the associated XInclude node that identifies it as being an XInclude'd node. Each top-level node that results from an include href=... in the libxml2 parser is sandwiched between nodes of class XMLXIncludeStartNode and XMLXIncludeStartNode. These are the sibling nodes.
Another approach to finding the origin of the XInclude for a given
node is to search for an attribute xml:base. This only works if the
document being XInclude'd is in a different directory than the base document.
If this is the case, we can use an XPath query to find the node
containing the attribute via "./ancestor::*[@xml:base]"
.
findXInclude(x, asNode = FALSE, recursive = FALSE)
x |
the node whose XInclude "ancestor" is to be found |
asNode |
a logical value indicating whether to return the node itself or the attributes of the node which are typically the immediately interesting aspect of the node. |
recursive |
a logical value that controls whether the full path of the nested includes is returned or just the path in the immediate XInclude element. |
Either NULL
if there was no node of class XMLXIncludeStartNode
found.
Otherwise, if asNode
is TRUE
, that XMLXIncludeStartNode
node is returned, or alternatively its attribute character vector.
Duncan Temple Lang
www.libxml.org
xmlParse
and the xinclude
parameter.
f = system.file("exampleData", "functionTemplate.xml", package = "XML") cat(readLines(f), "\n") doc = xmlParse(f) # Get all the para nodes # We just want to look at the 2nd and 3rd which are repeats of the # first one. a = getNodeSet(doc, "//author") findXInclude(a[[1]]) i = findXInclude(a[[1]], TRUE) top = getSibling(i) # Determine the top-level included nodes tmp = getSibling(i) nodes = list() while(!inherits(tmp, "XMLXIncludeEndNode")) { nodes = c(nodes, tmp) tmp = getSibling(tmp) }