我在使用PHP的XMLReader
類的moveToAttribute
方法時遇到問題。
我不想讀取XML文件的每一行。我希望能夠遍歷XML文件,而不必按順序進行;即隨機訪問。我認爲使用moveToAttribute
會將光標移動到具有指定屬性值的節點,然後我可以在其內部節點上執行處理,但是這不會按計劃進行。如何使用PHP的XMLReader類中的moveToAttribute方法?
這裏的xml文件的一個片段:
<?xml version="1.0" encoding="Shift-JIS"?>
<CDs>
<Cat Type="Rock">
<CD>
<Name>Elvis Prestley</Name>
<Album>Elvis At Sun</Album>
</CD>
<CD>
<Name>Elvis Prestley</Name>
<Album>Best Of...</Album>
</CD>
</Cat>
<Cat Type="JazzBlues">
<CD>
<Name>B.B. King</Name>
<Album>Singin' The Blues</Album>
</CD>
<CD>
<Name>B.B. King</Name>
<Album>The Blues</Album>
</CD>
</Cat>
</CDs>
這裏是我的PHP代碼:
<?php
$xml = new XMLReader();
$xml->open("MusicCatalog.xml") or die ("can't open file");
$xml->moveToAttribute("JazzBlues");
print $xml->nodeType . PHP_EOL; // 0
print $xml->readString() . PHP_EOL; // blank ("")
?>
我在做什麼錯,關於moveToAttribute?我如何使用節點的屬性隨機訪問節點?我想按目標節點Cat Type =「JazzBlues」而不按順序執行(即$ xml-> read()),然後處理其內部節點。
非常感謝。
您可能會更好地使用XML解析器,如SimpleXML與xpath支持http://php.net/manual/en/simplexmlelement.xpath.php – 2012-08-02 15:39:44
是的,我認爲這是一個好主意。我以爲我不需要它,但似乎XMLReader是一個或多個越野車的組合,並沒有很好地記錄(足夠)。 – user717236 2012-08-02 15:54:32
我已經使用SimpleXML很多,它通常與IMO合作很不錯。 – 2012-08-02 16:05:50