2017-06-03 106 views
0

我需要幫助瞭解以下內容:如何使用PHP中的simplexml從XML獲取項目href值?

我打開一個帶有PHP和simplexml的XML文件。 現在我希望得到一個值,而一個命名空間:

<?xml version='1.0' encoding='utf-8'?> 
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uuid_id"> 
    <metadata 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:opf="http://www.idpf.org/2007/opf" 
     xmlns:dcterms="http://purl.org/dc/terms/" 
     xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata" 
     xmlns:dc="http://purl.org/dc/elements/1.1/"> 
     <meta name="calibre:series_index" content="4" /> 
     <meta name="calibre:timestamp" content="2013-05-09T10:54:56+00:00" /> 
     <dc:title>TESTTITLE</dc:title> 
    </metadata> 
    <manifest> 
     <item href="cover1.jpeg" id="cover" media-type="image/jpeg" /> 
    </manifest> 
</package> 

訪問冠軍作品:

$opf = simplexml_load_file('tmp/'.$subtmp.'/content.opf'); 
    $namespaces = $opf->getNameSpaces(true); 
    $dc = $opf->metadata->children($namespaces['dc']); 
    echo $dc->title; 

但怎麼可能拿到套餐 - > manifest->用品 - > HREF哪裏ID是 - >封面?這樣我可以回顯「cover1.jpg」?

我試過幾種方法(例如Xpath)之類的東西

$cover = $opf->package->manifest->item->cover[0]['href']; 

但我總是得到空...

因此,有3個元素(包,清單,項目)和屬性命名封面和href,但我堅持了一段時間,需要幫助。

非常感謝!

回答

0

您應該能夠使用...

$opf->registerXPathNamespace("opf","http://www.idpf.org/2007/opf"); 
$item = $opf->xpath('//opf:item[@id="cover"]'); 
echo $item[0]['href']); 

$項目將是每一個項目具有屬性ID =蓋在文件中的數組。所以你可能需要循環它們。