XML と XMLList

XML の形式は正しいはずなのにパースエラーになる場合、 XML と XMLList の違いを考慮する必要があるかもしれません。

XML

ルートノードの直下に並列した属性が存在しない場合、こちらを使います。具体的には、以下のような XML の場合は XML にキャストできます。

<person>
  <name>TREE</name>
  <age>17</age>
  <birthday>4/2</birthday>
</person>

XMLList

上とは逆に、ルートノードの直下でリストのように属性が並列に並んだ場合、こちらでないとキャストできません。

<game_list>
  <game>
    <title>東方紅魔郷</title>
    <release>C62</release>
  </game>
  <game>
    <title>東方妖々夢</title>
    <release>C64</release>
  </game>
  <game>
    <title>東方永夜抄</title>
    <release>C66</release>
  </game>
</game_list>

注意点

以下のような XML を取得したとします。

<person>
  <name>TREE</name>
  <age>17</age>
  <equipment_list>
    <equipment>てつのバット</equipment>
    <equipment>ひきこもりのふく</equipment>
    <equipment>のろいのベルト</equipment>
  </equipment_list>
</person>

この XMLXML 型として取得できますが、ここから equipment_list を引数として渡すような場合、 XMLList を指定しないとエラーになってしまいます。equipment_list をルートノードとして考えると、 equipment が並列に並んだ XMLList とみなされるためです。