【发布时间】:2012-11-23 08:43:33
【问题描述】:
我有一个从 SQL 数据库获取 XML 文件的脚本。我是这样做的:
library(RODBC)
library(XML)
myconn <- odbcConnect("mydsn")
query.text <- "SELECT xmlfield FROM db WHERE id = 12345"
doc <- sqlQuery(myconn, query.text, stringsAsFactors=FALSE)
doc <- iconv(doc[1,1], from="latin1", to="UTF-8")
doc <- xmlInternalTreeParse(doc, encoding="UTF-8")
但是,解析不适用于特定的数据库行,尽管当我将此字段的内容复制到单独的文件中并从文件中解析时它起作用了。经过两天的“反复试验”,我确定了主要问题。似乎以这种方式查询短 XML 文件不会导致任何问题,但是当我查询较大的文件时,字符串在 65534 个字符后被截断。因此,缺少XML文件的结尾,无法解析文件。
我认为这可能是对我计算机上 ODBC 连接的总体限制。但是,另一个也使用 ODBC 从同一数据库中获取同一 XML 字段的程序可以毫无问题地执行此操作。所以我猜这是R 特有的问题。
有什么解决办法吗?
【问题讨论】:
-
我没有例子可以测试!但是您尝试使用 (cast/convert) 或 as.is 选项转换 xmlfield?
-
@agstudy 我试图在
sqlQuery中设置as.is = TRUE,但这没有帮助。转换xmlfield是什么意思? -
类似:select cast(xmlfield as varchar(255))..
-
@agstudy 出于某种原因,
varchar不起作用,但我将语句修改为SELECT CAST(xmlfield as CHAR(150000)) FROM...并且sqlQuery以这种方式工作。但是,问题仍然存在,字段内容在 65534 个字符后被截断。