2011-04-04 100 views
1

嗨,大家好,我已經四處尋找幫助,但沒有發現任何遺憾。我正在嘗試使用PHP來獲取XML文件的內容並從屬性中提取數據。我已經檢查過其他教程並嘗試過,但沒有任何工作。使用PHP獲取XML屬性

下面是XML文件:

<eveapi version="2"> 
    <currentTime>2011-04-03 03:55:59</currentTime> 
    <result> 
    <rowset name="notifications" key="notificationID" columns="notificationID,typeID,senderID,sentDate,read"> 
     <row notificationID="339040500" typeID="75" senderID="1000137" sentDate="2011-04-03 03:53:00" read="0" /> 
    </rowset> 
    </result> 
    <cachedUntil>2011-04-03 04:25:59</cachedUntil> 
</eveapi> 

我試圖拉從 'TYPEID' & 'sentDate' 的數據。而且,這個XML文件可能包含多個標籤。

歡迎所有幫助,謝謝!

+0

您是否嘗試過的SimpleXML? (http://php.net/simple_xml) – Ben 2011-04-04 05:02:37

+0

你在PHP 4或5? – Ben 2011-04-04 05:02:59

+0

@Ben這是2011年,我當然希望他使用PHP 5 ;-) – 2011-04-04 05:08:58

回答

2

您可以使用下面的代碼: -

$xmlstr = '<eveapi version="2"> 
    <currentTime>2011-04-03 03:55:59</currentTime> 
    <result> 
    <rowset name="notifications" key="notificationID" columns="notificationID,typeID,senderID,sentDate,read"> 
     <row notificationID="339040500" typeID="75" senderID="1000137" sentDate="2011-04-03 03:53:00" read="0" /> 

    </rowset> 
    </result> 
    <cachedUntil>2011-04-03 04:25:59</cachedUntil> 
</eveapi> 
'; 


$xml = simplexml_load_string($xmlstr); 

print_r ($xml->result->rowset->row['typeID']); 

注:如果您在行集有多個排那麼在對象,該行會隨着陣列的集合。在這種情況下,你必須訪問TYPEID像波紋管 -

print_r ($xml->result->rowset->row[0]['typeID']); 
+0

此外,不要擔心顯示** SimpleXMLElement對象**的值,你可以得到當你打印/回顯變量的時候,值爲 – mahadeb 2011-04-04 05:51:40

1

把阻燃西裝......

$string = '<eveapi version="2"> 
    <currentTime>2011-04-03 03:55:59</currentTime> 
    <result> 
    <rowset name="notifications" key="notificationID" columns="notificationID,typeID,senderID,sentDate,read"> 
     <row notificationID="339040500" typeID="75" senderID="1000137" sentDate="2011-04-03 03:53:00" read="0" /> 
    </rowset> 
    </result> 
    <cachedUntil>2011-04-03 04:25:59</cachedUntil> 
</eveapi>'; 

preg_match_all('#([\S]+)="(.*?)"#is', $string, $matches); 
unset($matches[0]); 

$xml = array_combine($matches[1], $matches[2]); 

print_r($xml); 

=

Array 
(
    [version] => 2 
    [name] => notifications 
    [key] => notificationID 
    [columns] => notificationID,typeID,senderID,sentDate,read 
    [notificationID] => 339040500 
    [typeID] => 75 
    [senderID] => 1000137 
    [sentDate] => 2011-04-03 03:53:00 
    [read] => 0 
) 
+0

不錯,*恥辱'n'快速刪除他的蹩腳答案* – 2011-04-04 05:54:17

+0

比沒有更好:) – 2011-04-04 06:22:39

+0

瞭解eveapi我認爲這個答案是不負責任的。 @Narg可能會希望用XML做更多的事情,而且一個骯髒的正則表達式不是一種好的方法,也不會教會任何人如何正確處理XML。 – sg3s 2012-04-14 22:03:55