顯然我錯過了一些簡單的東西。我有以下 xml 字符串,我使用 simplexml_load_string 解析它:$xmlString = '<root><Title>Heading Text</Title><Image><img src="https://image.com?id=123" alt="alt text" /></Image></root>';$xml = simplexml_load_string($xmlString);但是,我無法訪問圖像內的 img 標簽。我想我會用來$xml->Image[0]->img獲取元素并 $xml->Image[0]->img['src']獲取圖像的 url。但我不斷收到錯誤:嘗試獲取非對象的屬性“img”$xml->Image[0]測試為 SimpleXMLElement 類型,當我print_r()得到:SimpleXMLElement Object ( [img] => SimpleXMLElement Object ( [@attributes] => Array ( [src] => https://image.com?id=123 [alt] => alt text ) ) )就像我說的,我知道我錯過了一些非常明顯的東西,所以任何幫助將不勝感激。
1 回答

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
你是對的,$xml->Image[0]->img['src']
會給你屬性,但它會把它作為一個對象src
給你。
如果你運行print_r($xml->Image[0]->img['src']);
它會向你顯示:
SimpleXMLElement?Object( ????[0]?=>?https://image.com?id=123)
但如果你echo $xml->Image[0]->img['src'];
改為運行,它會給你這個:
https://image.com?id=123
原因是SimpleXMLElement 類實現了神奇的重載方法__toString
(或其在內部 C 代碼中的等效方法),因此每當您將對象轉換為字符串時,它都會為您提供字符串內容。由于echo
始終需要一個字符串,因此它隱式執行此操作,但您可以使用 顯式執行此操作(string)
,例如:
$imageSrc?=?(string)$xml->Image[0]->img['src']; var_dump($imageSrc);
(順便說一句,[0]
始終是可選的 - 如果您不提供數字,SimpleXML 會假設您想要唯一或第一個具有該名稱的子項,因此、$xml->Image->img['src']
和都會給出相同的結果。)$xml->Image[0]->img['src']
$xml->Image->img[0]['src']
$xml->Image[0]->img[0]['src']
- 1 回答
- 0 關注
- 313 瀏覽
添加回答
舉報
0/150
提交
取消