Learn R Programming

XML (version 3.99-0.5)

findXInclude: Find the XInclude node associated with an XML node

Description

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]".

Usage

findXInclude(x, asNode = FALSE, recursive = FALSE)

Arguments

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.

Value

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.

References

www.libxml.org

See Also

xmlParse and the xinclude parameter.

Examples

Run this code
# NOT RUN {
 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)
 }
# }

Run the code above in your browser using DataLab