2016-11-18 33 views
-2

我試圖用simplexml_load_file函數解析PHP中的XML文件。一切都很好,除了我的XML文件有一個<TIME>標籤,這是一個PHP函數。XML標記名是一個PHP函數

所以下面的代碼未能得到變量值:

$xml = simplexml_load_file('some_xml_file.xml'); 
$value = $xml->SOME_TAG->TIME; 

我如何獲得這個價值?

+2

你可以嘗試更具體的錯誤嗎?因爲據我所知,在這種情況下,PHP不會*嘗試執行函數time(),因爲它沒有任何括號(對於函數調用是必需的)。在' - >'之後,PHP查找對象的成員,而不是一般函數。 –

回答

0

從PHP手冊:包含下PHP的命名約定不 允許(例如連字符)字符的XML文檔內

訪問元件可以 實現由撐杆和 內包封元素名稱撇號。

例3獲得

<?php 
include 'example.php'; 

$xml = new SimpleXMLElement($xmlstr); 

echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems" 
?> 

如果你需要讓你可以做到這一點的一個屬性:

到目前爲止,我們只覆蓋讀取元素名稱的工作, 它們的值。 SimpleXML也可以訪問元素屬性。像元素一樣訪問元素的屬性 。

foreach ($xml->movie[0]->rating as $rating) { 
    switch((string) $rating['type']) 
0

這對我的作品

<?php 

$xmlString = "<top><middle><TIME>1:27</TIME></middle></top>"; 
$xml = simplexml_load_string($xmlString); 
echo $xml->middle->TIME; 


php /tmp/xml.php 
1:27 
0

檢查XML文件的內容。對於你的PHP代碼工作,它至少應該包含這樣的:

<XML> 
<SOME_TAG> 
    <TIME>1:27</TIME> 
</SOME_TAG> 
</XML> 

當我用你的代碼合併此XML文件,它按預期工作。

0

謝謝大家,我設法得到價值,但仍然有些奇怪。 XML例子:

<INGREDIENTS> 
    <INGREDIENT> 
     <NAME>Potatoes</NAME> 
     <AMOUNT>10 kg</AMOUNT> 
     <TME>20 min</TIME> 
    </INGREDIENT> 
</INGREDIENTS> 

PHP代碼得到名稱,金額和時間值:

$ing = $xml->INGREDIENTS->INGREDIENT; 
$name = $ing->NAME; 
$amount= $ing->AMOUNT; 
$time= $ing->TIME; 
echo $name."/".$amount."/".$time; 

結果:

Potatoes/10 kg/

但是,如果我用全路徑TIME標籤:

$ing = $xml->INGREDIENTS->INGREDIENT; 
$name = $ing->NAME; 
$amount= $ing->AMOUNT; 
$time= $xml->INGREDIENTS->INGREDIENT->TIME; 
echo $name."/".$amount."/".$time; 

結果:

Potatoes/10 kg/20 min 

任何人都可以解釋爲什麼它的工作方式是這樣嗎?

+0

對於舊的PHP 5.4.25,在給定XML文件示例的情況下,這適用於我:'$ xml = simplexml_load_file('some_xml_file.xml'); $ ing = $ xml-> INGREDIENT; $ name = $ ing-> NAME; $ amount = $ ing-> AMOUNT; $ time = $ ing-> TIME;'所以答案是:您需要使用正確的方式訪問SimpleXMLObjects的屬性... – Werner