XML 1.0 仕様を見ると、開始タグが次のようになっていることがわかります。
[40] STag ::= '<' Name (S Attribute)* S? '>'
そして、他の場所で、次の定義Name
を見つけます。
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-
これはそうではないことに気付くでしょうNameStartChar
:
<-vikings->1336162202</-vikings->
は有効な XML ではなく、コードのこの部分:
hash = Hash.from_xml(file.read)
ファイルに XML が含まれていないため、失敗しています。XML のように見えるテキストが含まれていますが、実際の XML ではありません。
data/mconvert.xml
実際の XML を含むようにファイルを修正し、再試行してください。
Rails コンソールで簡単な実験を行うと、何が起こっているかがわかります。
> Hash.from_xml('<-vikings->1336162202</-vikings->')
REXML::ParseException: #<REXML::ParseException: malformed XML: missing tag start
Line: 1
Position: 33
Last 80 unconsumed characters:
<-vikings->1336162202</-vikings->>
「不正な形式の XML: 開始タグがありません」に気付きましたか?