2016-05-06 7 views
1

私はXML解析業務では新しいです。愚かな質問を申し訳ありません。C++でtinyXML2でNULLポインタを取得するのはなぜですか?

私はXMLをナビゲートしたいと思います:

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
    <book id="bk103"> 
     <author>Corets, Eva</author> 
     <title>Maeve Ascendant</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-11-17</publish_date> 
     <description>After the collapse of a nanotechnology 
     society in England, the young survivors lay the 
     foundation for a new society.</description> 
    </book> 
    <book id="bk104"> 
     <author>Corets, Eva</author> 
     <title>Oberon's Legacy</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2001-03-10</publish_date> 
     <description>In post-apocalypse England, the mysterious 
     agent known only as Oberon helps to create a new life 
     for the inhabitants of London. Sequel to Maeve 
     Ascendant.</description> 
    </book> 
    <book id="bk105"> 
     <author>Corets, Eva</author> 
     <title>The Sundered Grail</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2001-09-10</publish_date> 
     <description>The two daughters of Maeve, half-sisters, 
     battle one another for control of England. Sequel to 
     Oberon's Legacy.</description> 
    </book> 
    <book id="bk106"> 
     <author>Randall, Cynthia</author> 
     <title>Lover Birds</title> 
     <genre>Romance</genre> 
     <price>4.95</price> 
     <publish_date>2000-09-02</publish_date> 
     <description>When Carla meets Paul at an ornithology 
     conference, tempers fly as feathers get ruffled.</description> 
    </book> 
    <book id="bk107"> 
     <author>Thurman, Paula</author> 
     <title>Splish Splash</title> 
     <genre>Romance</genre> 
     <price>4.95</price> 
     <publish_date>2000-11-02</publish_date> 
     <description>A deep sea diver finds true love twenty 
     thousand leagues beneath the sea.</description> 
    </book> 
    <book id="bk108"> 
     <author>Knorr, Stefan</author> 
     <title>Creepy Crawlies</title> 
     <genre>Horror</genre> 
     <price>4.95</price> 
     <publish_date>2000-12-06</publish_date> 
     <description>An anthology of horror stories about roaches, 
     centipedes, scorpions and other insects.</description> 
    </book> 
</catalog> 

私は(インターネットのチュートリアル以下)を実行しようとしていたコードであるのに対し:

tinyxml2::XMLDocument mappedxml1; 
XMLError eResult = mappedxml1.LoadFile(filename1); 
if(eResult == XML_SUCCESS){ 
     printf("XMLERROR is %d\nXML loading successfull.\n",eResult); 
    } 
    else{ 
     printf("XMLERROR is %d\nXML loading unsuccessfull.\n",eResult); 
    } 
XMLNode * pRoot1 = mappedxml1.FirstChild(); 
    if(pRoot1 == NULL){printf("ERROR: NO ROOT\n");} 
    else{printf("Good pointer\n");} 
XMLElement * pbook1 = pRoot1->FirstChildElement("book id"); 
    if (pbook1 == NULL){printf("ERROR PARSING ELEMENT\n");} 
    else{printf("GOT IT\n");} 

pRoot1が行ってもいいですが、 pbook1の値は常にNULLです。 私はそれを指すことを期待しますbk101

助けまたは提案? ありがとうございました

+2

プログラムがXMLを読み込めなかった場合でも、プロセスは続行されます。 –

答えて

6

book idという名前の要素を見つけようとしています。そのような要素はありません。

ただし、bookという名前の要素があります。
(そして、それぞれがidという名前属性を持っています。)

ます。また、現在FirstChildコール(そう*pRoot1は何でないでキャッチされているあなたのXML宣言を、スキップするパーサが必要になりますあなたはそれがだと思います!)。その代わりにFirstChildElement("catalog")を試すことができます。

脇に、エラー処理手順を確認することをお勧めします。現時点では、pRoot1がヌルポインタの場合は、コンソールにメッセージを書き込んだあと、引き続きそのヌルポインタの逆参照を試みます。

+0

あなたは明らかに正しいです。 私はエラー管理のことに同意します:私はコード全体の一部をコピーしました。 しかし、pbook1に最初の本を指摘するにはどうすればよいですか? – Wing

+0

*明らかに(typo) – Wing

+0

@Wing: 'book id'の代わりに' book'を書いてください。 –

関連する問題