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 & Comics</displayname>
<sortname>All About Books & 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) { }
這對於每個節點一遍又一遍地重複。我做錯了什麼,有沒有更好的方法去做我想要完成的事情?