2015-04-22 62 views
4

我不能讓XML節點的內容,並在同一時間用SimpleXML庫屬性:使用simplexml_load_file()不獲取節點內容

我有以下XML,並希望得到[email protected]屬性和節點的內容:

<page id="id1"> 
    <content name="abc">def</content> 
</page> 

方法simplexml_load_string()

print_r(simplexml_load_string('<page id="id1"><content name="abc">def</content></page>')); 

輸出該:

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [id] => id1 
     ) 

    [content] => def 
) 

如您所見,content節點的內容存在,但屬性丟失。我如何獲得內容和屬性?

謝謝!

+1

介紹與有關如何使用SimpleXML訪問元素和屬性的示例,請參閱PHP手冊中的詳細信息:[Basic SimpleXML用法](https://php.net/manual/en/simplexml.examples-basic.php) - 您可能會找到它的信息 – hakre

回答

1
$x = simplexml_load_string('<page id="id1"><content name="abc">def</content></page>'); 

爲了得到節點的屬性:

$attributes = $x->content->attributes(); //where content is the name of the node 
$name = $attributes['name']; 

要獲得content節點的內容:

$c = $x->content; 

有趣的是,這$ C可以作爲字符串和對象,即

echo $c; //prints string 
print_r($c) //prints it out as object 
+0

可用作字符串的對象由PHP中的magic __toString()方法完成:http://php.net/manual/en/language.oop5.magic.php#object.tostring - 您可以通過以下方式訪問屬性:他們的名字與陣列訪問,例如'$ C [ '名']'。你也應該接受你的回答,所以你的問題被標記爲已回答。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – hakre

1

內容的屬性存在。這只是print_r()的一個技巧,它是如何與內存中的XML對象一起工作的。

+0

謝謝你,chugadie,這個解釋雖然沒有答案。我將在下面發佈答案。 –

1

在simplexml中,訪問元素返回SimpleXMLElement對象。您可以使用var_dump查看這些對象的內容。

$book=simplexml_load_string('<page id="id1"><content name="abc">def</content></page>'); 
$content=$book->content; 
var_dump($content); 

您可以通過foreach循環訪問這些對象。

foreach($obj as $value) { 
if (is_array($value)) { 
    foreach ($value as $name=>$value) { 
    print $name.": ".$value."\n";}  
         } 
       else print $value; 
     } 

您不僅可以檢索內容(如元素和屬性),還可以添加和刪除它們。您還可以使用Xpath在複雜的XML樹中導航值。您只需要通過SimpleXMLElement類here的方法。

+0

感謝,user3633267,發光的主題! –

相關問題