使用PHP获取XML值

时间:2012-03-01 09:43:45

标签: php xml

我有一个XML文件。这是一个小版本。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
<title>Liste des ebooks</title>
<updated>2012-03-01T01:23:24Z</updated>
<author>
<name>Drown Del</name>
</author>
<opensearch:totalResults>2338</opensearch:totalResults>
<opensearch:itemsPerPage>100</opensearch:itemsPerPage>
<entry>
<category term="Romans" label="Romans"/>
<category term="Aventures" label="Aventures"/>
</entry>
</feed>

首先,我想知道如何在XML术语中调用类似opensearch:totalResults的内容。

我需要你的帮助,用PHP获取以下值。

<opensearch:totalResults>2338</opensearch:totalResults>我需要获得2338到PHP变量。

谢谢。


谢谢大家的回答。

我可以通过以下方式修复它。

$xml = simplexml_load_string($xmltext);
$val = $xml->xpath('opensearch:totalResults');
echo $val[0];

5 个答案:

答案 0 :(得分:3)

使用DOM将所有这些信息解析为PHP。实施例

$doc = new DOMDocument;
$doc->loadXML($xml);  //$xml is your xml string
echo $doc->getElementsByTagName("totalResults")->item(0)->nodeValue;

答案 1 :(得分:2)

对于您的第一个问题,opensearch:totalResults是开始标记的限定名称。它被称为限定名称(您可能会将其称为QName),因为它包含标记的名称空间opensearch)。

对于第二个问题,您可以轻松parse your XML加入DOMDocument,然后查询相关标记的值。 SO上有很多例子,当然还有谷歌;来自PHP.net的基本版本是here

重要说明:您当前的XML文档不包含opensearch命名空间的XML namespace declaration,因此不会解析。您需要通过修改添加此类声明:

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr"
      xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">

如果您需要更强大的查询功能,还可以使用XPath。最小的例子如下:

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);

$nodes = $xpath->query('//opensearch:totalResults');
foreach ($nodes as $node) {
    echo $node->nodeValue;
}

答案 2 :(得分:1)

opensearch 是一个名称空间,因此您可以尝试访问它,如:


$yourXml->children('openSearch', true)->totalResults

希望有所帮助

答案 3 :(得分:1)

在PHP中查看确切的结果

<?php
$xml ='<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
<title>Liste des ebooks</title>
<updated>2012-03-01T01:23:24Z</updated>
<author>
<name>Drown Del</name>
</author>
<opensearch:totalResults>2338</opensearch:totalResults>
<opensearch:itemsPerPage>100</opensearch:itemsPerPage>
<entry>
<category term="Romans" label="Romans"/>
<category term="Aventures" label="Aventures"/>
</entry>
</feed>';

$dom = new DOMDocument();
$dom->loadXML($xml);
$xmlD = simplexml_import_dom($dom);
echo $xmlD->totalResults;
?>

答案 4 :(得分:0)

simplexml_load_file作为对象

读取您的xml文件

然后得到你的变量:

$object->{'opensearch:totalResults'};