You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.0 KiB

#' HTML/XML tree viewer
#' This uses the \code{xml-viewer} JavaScript module to provide a simple collapsible
#' tree viewer for HTML/XML documents, nodes, node sets and plain character
#' HTML/XML in an \code{htmlwidget} pane.
#' @param doc \code{xml2} document/node/nodeset, an \code{HTMLInternalDocument}/
#' \code{XMLInternalDocument} or atomic character vector of HTML/XML content
#' @param scroll should the \code{<div>} holding the HTML/XML content scroll
#' (\code{TRUE}) or take up the full viewer/browser window (\code{FALSE}).
#' Default is \code{FALSE} (take up the full viewer/browser window). If
#' this is set to \code{TRUE}, \code{height} should be set to a value
#' other than \code{NULL}.
#' @param elementId element id
#' @param width widget \code{div} width
#' @param height widget \code{div} height
#' @note Large HTML or XML content may take some time to render properly. It is suggested
#' that this function be used on as minimal of a subset of HTML/XML as possible
#' or used in a browser context vs an IDE viewer context.
#' @export
#' @references \href{}{xml-viewer}
#' @example inst/examples/examples-xml_tree_view.R
xml_tree_view <- function(doc=NULL, scroll=FALSE,
elementId=NULL, width="100%", height=NULL) {
if (inherits(doc, "character")) {
doc <- paste0(doc, collapse="")
} else if (inherits(doc, "xml_nodeset")) {
doc <- paste0(as.character(doc), collapse="")
} else if (inherits(doc, "xml_document") | inherits(doc, "xml_node")) {
doc <- as.character(doc)
} else if (inherits(doc, "HTMLInternalDocument") |
inherits(doc, "XMLInternalDocument")) {
doc <- XML::saveXML(doc)
params <- list(
xmlDoc = doc,
scroll = scroll
# create widget
name = 'xmltreeview',
x = params,
width = width,
height = height,
package = 'xmlview',
elementId = elementId
#' @rdname xml_tree_view
#' @export
html_tree_view <- xml_tree_view