2011-06-20 12 views
0

私はPHPで大きな(約1.5 MB)XMLファイルを解析しています。私が焦点を当てたいノードは、深さが約2レベルであり、それらのノードごとに、特定の値を取得できるようにしたいと考えています。ネストされた値でXMLReaderを使用する

私はこれを行うのにSimplePieを使いたいと思っていましたが、私が読んだことから、XMLReaderがこれを行う最も良い方法のようです。私はXMLReaderを使用したことがなく、this exampleをテストしていました。残念ながら、それは私のために働いていません。ここで

されるXML(の一部):ここで

<?xml version="1.0" encoding="UTF-8"?> 
    <comiclist> 
    <comic> 
     <id>117</id> 
     <index>1</index> 
     <mainsection> 
     <pagecount>33</pagecount> 
     <credits> 
      <credit> 
      <role id="dfPenciler">Penciller</role> 
      <roleid>dfPenciler</roleid> 
      <person> 
       <displayname>Jim Lawson</displayname> 
       <sortname>Jim Lawson</sortname> 
      </person> 
      </credit> 
      <credit> 
      <role id="dfWriter">Writer</role> 
      <roleid>dfWriter</roleid> 
      <person> 
       <displayname>Peter Laird</displayname> 
       <sortname>Peter Laird</sortname> 
      </person> 
      </credit> 
     </credits> 
     <characters/> 
     <series> 
      <displayname>Teenage Mutant Ninja Turtles</displayname> 
      <sortname>Teenage Mutant Ninja Turtles</sortname> 
      <complete>No</complete> 
      <bpseriesid>0</bpseriesid> 
     </series> 
     </mainsection> 
     <collectionstatus listid="3">In Collection</collectionstatus> 
     <rare boolvalue="0">No</rare> 
     <coverfront>/Data/Images/tmnt_2.jpg</coverfront> 
     <format> 
     <displayname>Standard Comic Format</displayname> 
     <sortname>Standard Comic Format</sortname> 
     </format> 
     <publisher> 
     <displayname>Mirage Studios</displayname> 
     <sortname>Mirage Studios</sortname> 
     </publisher> 
     <country> 
     <displayname>USA</displayname> 
     <sortname>USA</sortname> 
     </country> 
     <language> 
     <displayname>English</displayname> 
     <sortname>English</sortname> 
     </language> 
     <store> 
     <displayname>All About Books &amp; Comics</displayname> 
     <sortname>All About Books &amp; Comics</sortname> 
     </store> 
     <purchaseprice>$2.95</purchaseprice> 
     <coverprice>$2.95</coverprice> 
     <purchasedate> 
     <year> 
      <displayname>2003</displayname> 
     </year> 
     <month>1</month> 
     <date>January 2003</date> 
     </purchasedate> 
     <condition> 
     <displayname>Near Mint</displayname> 
     <sortname>094 Near Mint</sortname> 
     <lastname>094 Near Mint</lastname> 
     </condition> 
     <issuenr>2</issuenr> 
     <publicationdate> 
     <year> 
      <displayname>2002</displayname> 
     </year> 
     <month>2</month> 
     <date>February 2002</date> 
     </publicationdate> 
     <genres> 
     <genre> 
      <displayname>Science Fiction</displayname> 
      <sortname>Science Fiction</sortname> 
     </genre> 
     </genres> 
     <tags/> 
     <links/> 
     <lastmodified> 
     <date>10/4/2007 6:17:29 AM</date> 
     </lastmodified> 
     <thumbfilepath>/Thumbnails/6108a98d11f81eee6dbd2a67c20b1650.jpg</thumbfilepath> 
     <sections/> 
     <seriesgroup> 
     <displayname>Other</displayname> 
     <sortname>Other</sortname> 
     </seriesgroup> 
     <issue>2</issue> 
     <quantity>1</quantity> 
     <bpcomicid>0</bpcomicid> 
     <bpcomiclastreceivedrevision>0</bpcomiclastreceivedrevision> 
     <bpseriesid>0</bpseriesid> 
     <wraparoundcover boolvalue="0">No</wraparoundcover> 
     <seriefirstletter> 
     <displayname>T</displayname> 
     <sortname>T</sortname> 
     </seriefirstletter> 
     <allcreators>Jim Lawson; Peter Laird</allcreators> 
     <submissiondate/> 
     <releasedate/> 
     <readingdate/> 
     <readtimes>0</readtimes> 
     <readit>No</readit> 
    </comic> 
    </comiclist> 
</comicinfo> 

は、私が使用していますPHPです:

<?php 
$z = new XMLReader; 
$z->open('comiclist.xml'); 

$doc = new DOMDocument; 

while ($z->read() && $z->name !== 'comic'); 

while ($z->name === 'comic') 
{ 

    $node = simplexml_import_dom($doc->importNode($z->expand(), true)); 

    var_dump($node->element_1); 

    $z->next('comic'); 
} 

?> 

何が表示されていることはこれです:

object(SimpleXMLElement)#3 (0) { } object(SimpleXMLElement)#4 (0) { } 

この各ノードについて何度も何度も繰り返される。私は間違って何をしているのですか?私が達成しようとしていることをやり遂げる良い方法がありますか?

答えて

0

私はこの問題を自分で解決することができました。

試して数時間のうちに&エラー(と研究)私は私が求めていたものを達成する方法を考え出しました。他の人のために以下に掲示されたテストコード。これは、各「漫画」ノードの3つの値を表示します。

<?php 
    $xml = simplexml_load_file('comiclist.xml'); 

    foreach ($xml->comiclist->comic as $comic) { 
    echo $comic->mainsection->series->displayname . ' #' . $comic->issuenr . ' is ID number: ' . $comic->id . '<br />'; 
    } 
?> 
関連する問題