2012-03-01 58 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