2017-06-03 69 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 =盖在文件中的数组。所以你可能需要循环它们。