2

基本的に質問はそれをすべて言います.xmlファイルをyamlに変換するにはどうすればよいですか?

私はこれを試しました:

require 'active_support/core_ext/hash/conversions'
require 'yaml'

file = File.open("data/mconvert.xml", "r")
hash = Hash.from_xml(file.read)
yaml = hash.to_yaml
File.open("data/mirador.yml", "w") { |file| file.write(yaml) }

しかし、「例外解析」エラーが発生します。xml タグ名にダッシュが含まれているためだと思ったので、ダッシュをに置き換えましたがdashcharacterr、それでも機能しませんでした。

4

1 に答える 1

2

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: 開始タグがありません」に気付きましたか?

于 2012-08-16T22:06:27.357 に答える