如何使用 R 从 SQL 数据库中检索很长的 XML 字符串?

2023-12-11

我有一个从 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-具体问题。

有什么想法如何修复它吗?


我已经写信给包作者并最终收到以下答复:

你看不懂不是我的问题,也不是我的合理借口。

手册说

'\item[字符类型] 字符类型可以分为三种方式: 固定或可变长度,按最大大小和字符
设置使用。最常用的类型\脚注{SQL 名称
这些是 \code{CHARACTER VARYING} 和 \code{CHARACTER},但是这些
对于日常使用来说太麻烦了。} 简称为 \code{varchar}
可变长度的字符串(达到某个最大值)和 \code{char}
固定长度的短字符串(通常用空格右侧填充)。
‘short’的值因 DBMS 而异,至少为 254,通常是
几千——通常其他类型的可用时间更长
字符串。有一个健全性检查,只允许
读取时最多 65535 字节的字符串:可以通过以下方式删除
重新编译 \pkg{RODBC}。'

该手册可以在doc的目录RODBC包裹。参考手册中不包含此信息。

与此同时,我找到了一个很好的解决方案来检索我的数据而不使用RODBC,我没有尝试重新编译这个包。但我希望这个答案对那些遇到同样问题的人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 R 从 SQL 数据库中检索很长的 XML 字符串? 的相关文章

随机推荐