2012-03-01 65 views
-3

我有一个XML文件。这是一个小的版本。使用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> 

首先,我想知道我们如何调用XML方面类似opensearch:totalResults

我需要你的帮助以获得下面的值与PHP。

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

谢谢。


谢谢大家的回答。

我可以用以下方法修复它。

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

老实说,我不能相信你找不到通过搜索功能,这个问题的答案。几乎每个DOM示例都演示了如何使用'getElementsByTagName' – Gordon 2012-03-01 10:11:14

+0

我尝试过'simplexml_load_string()'而不是'DOMDocument()'。无论如何,我可以解决我的问题。谢谢你的评论。 – 2012-03-01 10:16:29

+0

http://stackoverflow.com/search?q=xml+colon+php – Gordon 2012-03-01 10:16:39

回答

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; 
} 
+0

谢谢你的回答。我可以用XPath修复它,我也在这里发布我的答案。 – 2012-03-01 10:14:16

2

使用DOM将所有这些信息解析到PHP中。防爆。

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

谢谢您的回答。我可以用XPath修复它,我也在这里发布我的答案。 – 2012-03-01 10:13:35

1

的OpenSearch是一个命名空间,所以你可以尝试访问它想:

 

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

希望它可以帮助

+0

谢谢你的回答。我可以用XPath修复它,我也在这里发布我的答案。 – 2012-03-01 10:14:37

+0

很高兴知道你已经得到它 – 2012-03-01 10:18:00

0

simplexml_load_file读取XML文件作为对象

然后得到像这样的变量:

$object->{'opensearch:totalResults'}; 
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; 
?> 
+0

谢谢你的回答。我可以用XPath修复它,我也在这里发布我的答案。 – 2012-03-01 10:12:54

+0

我欣赏过。 – 2012-03-01 10:17:51

+0

感谢man..Jai后 – 2012-03-01 10:22:05