xmlParent {XML} | R Documentation

## Get parent node of XMLInternalNode or ancestor nodes

### Description

`xmlParent` operates on an XML node and returns a reference to its parent node within the document tree. This works for an internal, C-level `XMLInternalNode` object created, for examply, using `newXMLNode` and related functions or `xmlTree` or from `xmlTreeParse` with the `useInternalNodes` parameter.

It is possible to find the parent of an R-level XML node when using a tree created with, for example, `xmlHashTree` as the parent information is stored separately.

`xmlAncestors` walks the chain of parens to the top of the document and either returns a list of those nodes, or alternatively a list of the values obtained by applying a function to each of the nodes.

### Usage

    xmlParent(x)
    xmlAncestors(x, fun = NULL, ...)

### Arguments

`x` | an object of class `XMLInternalNode` whose parent is being requested.
`fun` | an R function which is invoked for each node as we walk up the tree.
`...` | any additional arguments that are passed in calls to `fun` after the node object.

### Details

This uses the internal libxml structures to access the parent in the DOM tree. This function is generic so that we can add methods for other types of nodes if we so want in the future.

### Value

`xmlParent` returns object of class `XMLInternalNode`.
If `fun` is `NULL`, `xmlAncestors` returns a list of the nodes in order of top-most node or root of the tree, then its child, then the child of that child, etc. This is the reverse order in which the nodes are visited/found.
If `fun` is a function, `xmlAncestors` returns a list whose elements are the results of calling that function for each node. Again, the order is top down.

### Author(s)

Duncan Temple Lang

### References

http://www.w3.org/XML

### See Also

`xmlChildren` `xmlTreeParse` `xmlNode`

### Examples

      top = newXMLNode("doc")
      s = newXMLNode("section", attr = c(title = "Introduction"))
      a = newXMLNode("article", s)
      addChildren(top, a)

      xmlName(xmlParent(s))
      xmlName(xmlParent(xmlParent(s)))

        # Find the root node.
      root = a
      while(!is.null(xmlParent(root)))
          root = xmlParent(root)

       # find the names of the parent nodes of each 'h' node.
       # use a global variable to "simplify" things and not use a closure.

      filename = system.file("exampleData", "branch.xml", package = "XML")
      parentNames <- character()
      xmlTreeParse(filename,
                    handlers =
                      list(h = function(x) {
                       parentNames <<- c(parentNames, xmlName(xmlParent(x)))
                      }), useInternalNodes = TRUE)

      table(parentNames)

[Package XML version 2.5-1 Index]