3

XML を Windows 8 ストア アプリに読み込むときに問題が発生します。

複数の親ノードと子ノードを持つ XML があり、ノードの 1 つだけを読み取り、すべてを 1 つの文字列に連結する必要があります。両方の親ノードをループして、データを読み取る必要がある単一の子ノードからデータを抽出するために、さまざまな方法を試しました。私は XmlReader クラスを使用しています。これは、あまり問題なく読み取ることができる最も簡単な方法です。

これは私が読もうとしている XML です:

<platforms>
<platform>
<api_detail_url>
<![CDATA[ http://www.giantbomb.com/api/platform/3045-20/ ]]>
</api_detail_url>
<id>20</id>
<name>
<![CDATA[ Xbox 360 ]]>
</name>
<site_detail_url>
<![CDATA[ http://www.giantbomb.com/xbox-360/3045-20/ ]]>
</site_detail_url>
<abbreviation>
<![CDATA[ X360 ]]>
</abbreviation>
</platform>
<platform>
<api_detail_url>
<![CDATA[ http://www.giantbomb.com/api/platform/3045-86/ ]]>
</api_detail_url>
<id>86</id>
<name>
<![CDATA[ Xbox Live Marketplace ]]>
</name>
<site_detail_url>
<![CDATA[
http://www.giantbomb.com/xbox-live-marketplace/3045-86/
]]>
</site_detail_url>
<abbreviation>
<![CDATA[ XBLM ]]>
</abbreviation>
</platform>
</platforms>

そして、これはそれを読む私の現在の試みです:

if(reader.ReadToDescendant("platform"))
{
    do
    {
        i++;
        reader.ReadToDescendant("name");
        reader.ReadStartElement("name");
        gPlat = gPlat + reader.Value + Environment.NewLine;
        reader.ReadToFollowing("platform");
    }
    while (reader.ReadToNextSibling("platform"));
}

do / whileループ内に他の種類のリーダー関数/メソッドがある場合、両方の「プラットフォーム」ノードをループすることはできないようです。空白のままにしておくと、問題なくループします(i変数はこれをテストするために使用)

私が目指しているのは、値として 2 つの名前の子ノードを持つ連結された文字列ですが、ループは 1 回だけで、2 番目の「名前」ノードは完全にスキップされます。XML は Web API によって返されているため、変更できません。

どんな助けでも大歓迎です。

4

2 に答える 2