如何在PHP中使用simplexml从XML获取项目href值?

时间:2017-06-03 17:57:36

标签: php xml simplexml

我需要帮助才能理解以下内容:

我用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;

但是怎样才能获得package-&gt; manifest-&gt; item-&gt; href其中ID是 - &gt;覆盖?所以我可以回应&#34; cover1.jpg&#34;?

我尝试了几种方法(比如xpath)和类似

之类的东西
$cover = $opf->package->manifest->item->cover[0]['href'];

但我总是得到NULL ......

所以,有3个元素(包,清单,项目)和一个名为cover和href的属性,但我坚持了一段时间并需要帮助。

提前多多感谢!

1 个答案:

答案 0 :(得分:0)

你应该可以使用......

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

$ item将是文档中具有属性id = cover的每个项目的数组。所以你可能需要遍历它们。