4

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")

ただし、このフィールドの内容を別のファイルにコピーしてファイルから解析した場合は機能しましたが、特定のデータベース行では解析が機能しませんでした。2 日間の「試行錯誤」の後、私は主な問題を特定しました。この方法で短い XML ファイルをクエリしても問題はないように見えますが、より大きなファイルをクエリすると、65534 文字の後に文字列が途切れてしまいます。したがって、XML ファイルの末尾が欠落しており、ファイルを解析できません。

これは、コンピューターの ODBC 接続の全体的な制限である可能性があると思いました。ただし、ODBC を使用して同じデータベースから同じ XML フィールドを取得する別のプログラムは、これを問題なく実行します。だから私はそれがR固有の問題だと思います。

それを修正する方法はありますか?

4

2 に答える 2

4

パッケージの作成者に手紙を書き、最終的に次の回答を受け取りました。

あなたが読めないことは私の問題ではないし、正当な言い訳にもなりません。

マニュアルによると

'\item[文字タイプ] 文字タイプは、固定長と可変長、最大サイズ、
使用する文字セットの 3 つの方法で分類できます。最も一般的に使用される型\footnote{
これらの SQL 名は \code{CHARACTER VARYING} と \code{CHARACTER} ですが、これら
はルーチンで使用するにはあまりにも面倒です。} は
、可変長の短い文字列を表す \code{varchar} です (いくつかの最大値まで) と \code{char}
は固定長の短い文字列 (通常は右側にスペースが埋め込まれます) を表します。
「short」の値は DBMS によって異なり、少なくとも 254、多くの場合
数千です。多くの場合、より長い
文字列には他のタイプを使用できます。読み取り時に最大 65535 バイトの文字列のみを許可する健全性チェックがあり
ます。これは次の方法で削除できます。
\pkg{RODBC} を再コンパイルしています。

このマニュアルは、パッケージのdocディレクトリにあります。RODBCこの情報は、リファレンス マニュアルには含まれていません。

その間、 を使用せずにデータを取得するための適切な解決策を見つけたので、RODBCこのパッケージを再コンパイルしようとはしていません。しかし、この回答が同じ問題で問題を抱えている人に役立つことを願っています.

于 2012-12-05T13:46:40.197 に答える