File: xml_name.R

package info (click to toggle)
r-cran-xml2 1.1.0-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 852 kB
  • sloc: cpp: 1,057; xml: 115; sh: 53; ansic: 12; makefile: 6
file content (92 lines) | stat: -rw-r--r-- 2,196 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#' The (tag) name of an xml element.
#'
#' @param x A document, node, or node set.
#' @param ns Optionally, a named vector giving prefix-url pairs, as produced
#'   by \code{\link{xml_ns}}. If provided, all names will be explicitly
#'   qualified with the ns prefix, i.e. if the element \code{bar} is defined
#'   in namespace \code{foo}, it will be called \code{foo:bar}. (And
#'   similarly for atttributes). Default namespaces must be given an explicit
#'   name. The ns is ignored when using \code{\link{xml_name<-}} and
#'   \code{\link{xml_set_name}}.
#' @return A character vector.
#' @export
#' @examples
#' x <- read_xml("<bar>123</bar>")
#' xml_name(x)
#'
#' y <- read_xml("<bar><baz>1</baz>abc<foo /></bar>")
#' z <- xml_children(y)
#' xml_name(xml_children(y))
xml_name <- function(x, ns = character()) {
  UseMethod("xml_name")
}

#' @export
xml_name.xml_missing <- function(x, ns = character()) {
  NA_character_
}

#' @export
xml_name.xml_nodeset <- function(x, ns = character()) {
  vapply(x, xml_name, ns = ns, FUN.VALUE = character(1))
}

#' @export
xml_name.xml_node <- function(x, ns = character()) {
  node_name(x$node, nsMap = ns)
}

#' Modify the (tag) name of an element
#'
#' @inheritParams xml_name
#' @param value a character vector with replacement name.
#' @rdname xml_name
#' @export
`xml_name<-` <- function(x, ns = character(), value) {
   UseMethod("xml_name<-")
}

#' @export
`xml_name<-.xml_node` <- function(x, ns = character(), value) {
  node_set_name(x$node, value)
  x
}

#' @export
`xml_name<-.xml_nodeset` <- function(x, ns = character(), value) {
  if (length(x) == 0) {
    return(x)
  }
  if (!is.list(ns)) {
     ns <- list(ns)
  }
  Map(`xml_name<-`, x, ns, value)
  x
}

#' @export
`xml_name<-.xml_missing` <- function(x, ns = character(), value) {
  x
}

set_name <- function(x, value, ns = character()) {
  xml_name(x = x, ns = ns) <- value
  x
}

#' @rdname xml_name
#' @inheritParams xml_name
#' @export
#' @export
xml_set_name <- function(x, value, ns = character()) {
  UseMethod("xml_set_name")
}

#' @export
xml_set_name.xml_node <- set_name

#' @export
xml_set_name.xml_nodeset <- set_name

#' @export
xml_set_name.xml_missing <- set_name