1

私は非常に奇妙な問題を抱えています.2つのxmlファイルで同じコードを実行します.2番目は最初のファイルのコピーです(内容をコピーしましたが、それが問題かもしれません)。コードは REXML を使用して xml ファイルを解析します。最初のファイルではすべて問題ありませんが、2 番目のファイルでは次のエラーが発生します: 失敗: 不正な形式の XML: タグの開始行がありません 行: 2 位置: 102 最後の 80 の未使用文字:

<t>dede</t> 

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

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

何か案は?

どうもありがとう

4

3 に答える 3

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のバージョンと、実際のコードはどのようになっていますか?

編集:ストリームパーサーを使用しているという新しい情報に基づいて、Ruby1.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"
于 2011-01-07T01:57:34.727 に答える
1

ファイルのエンコーディングが原因です。同じ問題があり、ファイルが UCS-2 でエンコードされていることがわかりました。UTF-8 または ANSI は機能しますが、UCS-2 は機能しないようです。おそらく、最初にこの形式に特化したパーサーが必要です。Notepad ++でxmlファイルを変換して、さまざまなエンコーディングをテストしました。

于 2011-03-11T09:13:28.593 に答える
0

REXML は、ParseException をスローするには少し熱心すぎるようです。エンコーディングは間違いなく主な原因です。ファイルのエンコーディングを確認してください。

于 2012-07-27T15:15:24.927 に答える