【问题标题】:Can you parse an XML into R Shiny and view as a data frame?您可以将 XML 解析为 R Shiny 并作为数据框查看吗?
【发布时间】:2021-05-03 18:22:00
【问题描述】:

我是 R-shiny 的新手,我正在尝试开发一个 R-shiny 应用程序,该应用程序允许用户上传 XML 文件,将表格作为数据框查看,然后以 CSV 格式下载。

到目前为止,我在任何地方都没有运气尝试找到将 XML 解析为 R-shiny 的信息。下面是我从其他人的帖子中找到的一些代码,它允许您读取 XML 并显示原始文本,但我正在寻找一个合适的数据框,以便我可以对数据进行一些分析用户上传的。

library(shiny)
ui <- fluidPage(
    fileInput("File", "Choose file"),
    tableOutput("Data")
)

server <- function(input, output, session) {
    Data <- eventReactive(input$File, {
        read_xml(input$File$datapath)
        
    })
    
    output$Data <- renderTable({
        head(xml_text(Data()))
    })
}

shinyApp(ui, server)

在 R 中执行我需要的代码非常简单,但是将其转换为 R-shiny 会给我带来很多麻烦。

data <- xmlParse("C:/filepath/data.xml")

df <- xmlToDataFrame(data, nodes =getNodeSet(data, "//nm:Row",
                                             namespaces=c(nm = "urn:schemas-microsoft-com:office:spreadsheet")))

有人可以帮忙吗?

提前致谢!

【问题讨论】:

    标签: r xml dataframe shiny


    【解决方案1】:

    你可以使用包XML就像你在base R中一样:

    library(shiny)
    library(XML)
    
    ui <- fluidPage(
        fileInput("File", "Choose file"),
        tableOutput("Data")
    )
    
    server <- function(input, output, session) {
        df <- eventReactive(input$File, {
            xmlToDataFrame(input$File$datapath)
        })
        
        output$Data <- renderTable( head( df()))
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 您好,感谢您的回复!抱歉,我应该提到我需要访问的 XML 有多个节点,因此按照您建议的方式使用 xmlToDataFrame 会产生错误“列的重复下标”。为了在基础 R 中生成数据框,我需要使用问题中第二段代码中显示的代码,您知道如何在闪亮中使用它吗?非常感谢!
    【解决方案2】:

    更新:我已经设法通过编写一个将 xml 的“表”节点转换为数据框的函数来解决这个问题,并从服务器内部调用此函数。

    converter <- function(xml_data){
        data <- xmlParse(xml_data)
        df <- xmlToDataFrame(data, nodes =getNodeSet(data, "//nm:Row",
                                                     namespaces=c(nm = "urn:schemas-microsoft-com:office:spreadsheet")))
        colnames(df) <- df[1,]
        df <- df[-1, ]
        return(df)
    }
    
    ui <- fluidPage(
        fileInput("File", "Choose file"),
        tableOutput("Data")
    )
    
    server <- function(input, output, session) {
        df <- eventReactive(input$File, {
            converter(input$File$datapath)
        })
        
        output$Data <- renderTable( head( df()))
    }
    
    shinyApp(ui, server)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多