findXInclude {XML} | R Documentation

## 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.

### Author(s)

Duncan Temple Lang

### References

www.libxml.org

### See Also

`xmlParse` and the `xinclude` parameter.

### Examples

     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)
     }

[Package XML version 3.98-1.4 Index]