1#' The (tag) name of an xml element. 2#' 3#' @param x A document, node, or node set. 4#' @param ns Optionally, a named vector giving prefix-url pairs, as produced 5#' by [xml_ns()]. If provided, all names will be explicitly 6#' qualified with the ns prefix, i.e. if the element `bar` is defined 7#' in namespace `foo`, it will be called `foo:bar`. (And 8#' similarly for attributes). Default namespaces must be given an explicit 9#' name. The ns is ignored when using [xml_name<-()] and 10#' [xml_set_name()]. 11#' @return A character vector. 12#' @export 13#' @examples 14#' x <- read_xml("<bar>123</bar>") 15#' xml_name(x) 16#' 17#' y <- read_xml("<bar><baz>1</baz>abc<foo /></bar>") 18#' z <- xml_children(y) 19#' xml_name(xml_children(y)) 20xml_name <- function(x, ns = character()) { 21 UseMethod("xml_name") 22} 23 24#' @export 25xml_name.xml_missing <- function(x, ns = character()) { 26 NA_character_ 27} 28 29#' @export 30xml_name.xml_nodeset <- function(x, ns = character()) { 31 vapply(x, xml_name, ns = ns, FUN.VALUE = character(1)) 32} 33 34#' @export 35xml_name.xml_node <- function(x, ns = character()) { 36 .Call(node_name, x$node, ns) 37} 38 39#' Modify the (tag) name of an element 40#' 41#' @param value a character vector with replacement name. 42#' @rdname xml_name 43#' @export 44`xml_name<-` <- function(x, ns = character(), value) { 45 UseMethod("xml_name<-") 46} 47 48#' @export 49`xml_name<-.xml_node` <- function(x, ns = character(), value) { 50 .Call(node_set_name, x$node, value) 51 x 52} 53 54#' @export 55`xml_name<-.xml_nodeset` <- function(x, ns = character(), value) { 56 if (length(x) == 0) { 57 return(x) 58 } 59 if (!is.list(ns)) { 60 ns <- list(ns) 61 } 62 Map(`xml_name<-`, x, ns, value) 63 x 64} 65 66#' @export 67`xml_name<-.xml_missing` <- function(x, ns = character(), value) { 68 x 69} 70 71set_name <- function(x, value, ns = character()) { 72 xml_name(x = x, ns = ns) <- value 73 x 74} 75 76#' @rdname xml_name 77#' @export 78xml_set_name <- function(x, value, ns = character()) { 79 UseMethod("xml_set_name") 80} 81 82#' @export 83xml_set_name.xml_node <- set_name 84 85#' @export 86xml_set_name.xml_nodeset <- set_name 87 88#' @export 89xml_set_name.xml_missing <- set_name 90