【发布时间】:2020-10-23 04:53:17
【问题描述】:
我有一个关于 XML 节点的问题。
我想同时替换 Excel 文件中的值和公式,所以首先,我使用file.rename() 将其更改为 zip 文件,之后,我在 zip 文件的 XML 文件中工作。
你可以在/xl/worksheets/sheet1.xml找到XML,替换,我写代码行:
library(XML)
### Change excel to zip
data_path <- "Untitled 1.xlsx"
file.rename(data_path, "Untitled 1.zip")
dir.create("Untitled 1")
utils::unzip("Untitled 1.zip", exdir = "Untitled 1")
### Read XML file
doc <- xmlTreeParse("Untitled 1/xl/worksheets/sheet1.xml", useInternal = TRUE)
#### Select the nodes we want to update
nodes <- getNodeSet(doc, "/worksheet")
nodes <- getNodeSet(doc, "/worksheet/sheetData")
# > list()
# > list()
当我得到节点时,它们都返回空白列表节点。它与getNodeSet(doc, "/") 一起使用,Xpath 表达式是/,它返回长度为 1 的列表。我不明白为什么? XML文件有什么问题?我刚刚在https://www.freeformatter.com/xpath-tester.html 中测试过,如果Xpath 表达式为/worksheet 或/worksheet/sheetData,它仍然返回正确的结果
你能解释一下问题是什么吗?谢谢。
我在here附上了excel文件、输出zip文件和XML文件
【问题讨论】: