R: Manipulate sibling XML nodes

getSibling {XML} | R Documentation

## Manipulate sibling XML nodes

### Description

These functions allow us to both access the sibling node to the left or right of a given node and so walk the chain of siblings, and also to insert a new sibling

### Usage

    getSibling(node, after = TRUE, ...)
    addSibling(node, ..., kids = list(...), after = NA)

### Arguments

`node` | the internal XML node (XMLInternalNode) whose siblings are of interest
`...` | the XML nodes to add as siblings or children to node.
`kids` | a list containing the XML nodes to add as siblings. This is equivalent to ... but used when we already have the nodes in a list rather than as individual objects. This is used in programmatic calls to `addSibling` rather interactive use where we more commonly have the individual node objects.
`after` | a logical value indicating whether to retrieve or add the nodes to the right (`TRUE`) or to the left (`FALSE`) of this sibling.

### Value

`getSibling` returns an object of class XMLInternalNode (or some derived S3 class, e.g. XMLInternalTextNode)

`addSibling` returns a list whose elements are the newly added XML (internal) nodes.

### See Also

`xmlChildren`, `addChildren` `removeNodes` `replaceNodes`

### Examples

              # Reading Apple's iTunes files
         #
         #           Here we read  a "censored" "database" of songs from Apple's  iTune application
         #           which is stored in a property list.  The format is quite generic and
         #            the fields for each song are given in the form
         #
         #             <key>Artist</key><string>Person's name</string>
         #
         #           So to find the names of the artists for all the songs, we want to
         #           find all the <key>Artist<key> nodes and then get their next sibling
         #           which has the actual value.
         #
         #           More information can be found in .
         #
               fileName = system.file("exampleData", "iTunes.plist", package = "XML")

               doc = xmlParse(fileName)
               nodes = getNodeSet(doc, "//key[text() = 'Artist']")
               sapply(nodes, function(x)  xmlValue(getSibling(x)))

          f = system.file("exampleData", "simple.xml", package = "XML")
          tt = as(xmlParse(f), "XMLHashTree")

           tt

          e = getSibling(xmlRoot(tt)[[1]])
            # and back to the first one again by going backwards along the sibling list.
          getSibling(e, after = FALSE)

             # This also works for multiple top-level "root" nodes
          f = system.file("exampleData", "job.xml", package = "XML")
          tt = as(xmlParse(f), "XMLHashTree")
           x = xmlRoot(tt, skip = FALSE)
           getSibling(x)
           getSibling(getSibling(x), after = FALSE)

[Package XML version 3.98-1.19 Index]