2011-01-07 9 views
0

私は非常に奇妙な問題があります:2つ目のxmlファイルで同じコードを実行します.2番目のファイルは最初のコピーです(コンテンツをコピーしました。 。 このエラーは、REXMLを使用してXMLファイルを解析します。 失敗しました:不正なXML:タグの開始がありません 行:2 位置:102 最後の80未消費文字:ruby​​ malformed XML:タグが見つからない

<t>dede</t> 

xmlファイルの内容は次のとおりです。

<?xml version="1.0" standalone="yes"?> 
<t>dede</t> 

任意のアイデア?たくさん

答えて

1

おかげで、私はこのコードを使用して任意のこのような問題を持っていない:

require 'rexml/document' 
doc = REXML::Document.new <<ENDXML 
    <?xml version="1.0" standalone="yes"?> 
    <t>dede</t> 
ENDXML 

doc.each_element('//t'){ |e| puts e } 
#=> <t>dede</t> 

使用している、そしてどのようなあなたのコードが実際のように見えるんルビーのバージョンは何?

編集:あなたは、ストリームパーサを使用している新しい情報をオフに基づいて、ここにも私はRubyの1.8.7使用のために動作するコードの別の部分があります:

class Listener 
    def method_missing(name, *args); puts "I don't support '#{name}'"; end 
    def tag_start(name, attrs); puts "<#{name} #{attrs.inspect}>"; end 
    def text(str); p str; end 
    def tag_end(name); puts "</#{name}>"; end 
end 

require 'stringio' 
xml = StringIO.new <<ENDXML 
    <?xml version="1.0" standalone="yes"?> 
    <t>dede</t> 
ENDXML 

require 'rexml/document' 
doc = REXML::Document.parse_stream(xml, Listener.new) 
#=> "\t" 
#=> I don't support 'xmldecl' 
#=> "\n\t" 
#=> <t {}> 
#=> "dede" 
#=> </t> 
#=> "\n" 
+0

ruby​​ 1.8.7を使用すると、コードはREXML :: Document.parse_stream(File.open(file_name)、listener) –

+0

です。上記のコードは1.8.7でも動作します。さらに調べるには、まず 'p IO.read(file_name)'の結果を貼り付けます。 – Phrogz

1

それはので、ファイルのですエンコーディング。私は同じ問題があり、ファイルがUCS-2でエンコードされていることがわかりました。 UTF-8またはANSIのいずれかが動作しますが、UCS-2はそうではありません。おそらく、このフォーマットのための専門のパーサーが最初に必要です。私は、Notepad ++でxmlファイルを変換して、さまざまなエンコーディングをテストしました。

0

REXMLは、ParseExceptionをスローするのがやりにくいようです。エンコーディングは間違いなく大きな原因です。ファイルのエンコーディングを確認してください。

関連する問題