解析无效的XML中的R
我试图从http://www.kavita-ganesan.com/entity-ranking-data解析无效的XML中的R
提供的数据存储库解析汽车检讨数据集是格式化为
<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解析,但是,我不知道是否有一个更优雅的解决方案在那里。
真的,你试过对我来说看起来不错。
这是多与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>
感谢您采用这种替代方法。它完成这项工作,但是仍然需要额外的步骤从变量中移除标签。是不是通过数据一次性读取所有数据? – comendeiro
除了用像sed这样的工具预处理数据之外,我还没有看到......(还) –
最后,你的回答对我来说非常有用。我尝试将它解析为XML时遇到了一些问题,因此我选择将其作为文本对待并逐行解析。 – comendeiro
创建包装文件是这样的:
<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "actual.xml">
]>
<wrapper>&e;</wrapper>
其中“actual.xml “是你当前的文件(在同一个目录中);然后解析包装文档。
从技术上讲,您的输入是一个格式良好的外部一般解析实体,但它不是一个格式良好的文档实体。有效性没有涉及到,因为没有模式或DTD。
对我来说看起来不错/优雅。 –
谢谢@Aurèle。但我想知道是否有更高效的解决方案,不需要两次读取数据并使用gsub。 – comendeiro