我试图解析http://www.kavita-ganesan.com/entity-ranking-data
提供的存储库中的汽车审核数据集数据是一系列包含格式为
的文本的文件<DOC>
<DATE>Some Text</DATE>
<AUTHOR>Some Text</AUTHOR>
<TEXT>Some Text</TEXT>
<FAVORITE>Some text</FAVORITE>
</DOC>
<DOC>
<DATE>Some Text</DATE>
<AUTHOR>Some Text</AUTHOR>
<TEXT>Some Text</TEXT>
<FAVORITE>Some text</FAVORITE>
</DOC>
.....
这不是有效的XML,尽管它看起来像XML。
我想通过在文本的开头和结尾附加标记<file>
和</file>
来强制它成为有效的XML。
library(XML)
#read the file and append the tags
file = c("<file>",readLines("2007/2007_nissan_versa"),"</file>")
#remove invalid characters
file = gsub(pattern = "[&\"\']",replacement = "",x = file)
xmlParse(file)
它确实有效,然后它可以被xmlParse解析,但是,我想知道是否有更优雅的解决方案。
答案 0 :(得分:1)
你真的对我看起来很好。
这更像是scan()
的玩具答案,它显示了解析此类文件的不同方式:
data.frame(scan(
textConnection("<DOC>
<DATE>Some Text</DATE>
<AUTHOR>Some Text</AUTHOR>
<TEXT>Some Text</TEXT>
<FAVORITE>Some text</FAVORITE>
</DOC>
<DOC>
<DATE>Some Text</DATE>
<AUTHOR>Some Text</AUTHOR>
<TEXT>Some Text</TEXT>
<FAVORITE>Some text</FAVORITE>
</DOC>"),
what = list(X1="", DATE="", AUTHOR="", TEXT="", FAVORITE="", X2=""),
multi.line = TRUE,
sep = "\n"
), stringsAsFactors = FALSE)
# X1 DATE AUTHOR TEXT FAVORITE X2
# 1 <DOC> <DATE>Some Text</DATE> <AUTHOR>Some Text</AUTHOR> <TEXT>Some Text</TEXT> <FAVORITE>Some text</FAVORITE> </DOC>
# 2 <DOC> <DATE>Some Text</DATE> <AUTHOR>Some Text</AUTHOR> <TEXT>Some Text</TEXT> <FAVORITE>Some text</FAVORITE> </DOC>
答案 1 :(得分:0)
创建一个这样的包装器文档:
<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "actual.xml">
]>
<wrapper>&e;</wrapper>
其中“actual.xml”是您当前的文件(在同一目录中);然后解析包装文档。
从技术上讲,您的输入是格式良好的外部常规解析实体,但它不是格式良好的文档实体。有效性没有进入,因为没有架构或DTD。