2016-08-26 5 views
-1

プログラムは、複数のノードがあるかどうかによって動作が異なります。さまざまなノード数でXMLファイルを繰り返し処理する

body["Folder"].count 

シングルノードの例

<Document> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
</Document> 

予想される出力:1、実際:2 フォルダの内部ノード上のカウントを実行するために表示されます。

複数のノードの例

<Document> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
</Document> 

予想される出力:2、実際:2 それはフォルダのノードではなく、フォルダの子供をカウントします。 3つのフォルダに3などがあります。

単一ノードの例で、フォルダノードをカウントするにはどうしたらいいですか?

+1

'' 'body'''が実際に何を実行しているか、または少なくともいくつかの情報を提供できますか? どのようなXMLライブラリを使用していますか? –

+0

Bodyはドキュメントのハッシュです。ファイルを解析するために、私は現在クラック・ジェムを使用していますが、xmlをハッシュまたはjsonに変換するためにRubyの標準ライブラリを使用して同じ問題に遭遇しました。 – sso777

+0

ハッシュの外観はどうですか? –

答えて

0

crack gemは同じタグを配列と同じキーの下に置きます。あなたはこれをしようとした場合:

require 'crack' 

body = Crack::XML.parse("<Document> <Folder><name></name><placemark></placemark></Folder><Folder><name></name><placemark></placemark></Folder></Document>") 

body次のようになります。body["Folder"]は二つの要素(2つの「フォルダ」のタグ)を持つ配列であり、カウントがcount2を返しますすることを意味

=> "{\"Document\"=>{\"Folder\"=>[{\"name\"=>nil, \"placemark\"=>nil}, {\"name\"=>nil, \"placemark\"=>nil}]}}" 

なぜなら、 ''の数が常にカウントの結果と同じ理由です。

関連する問題