2010-10-28 76 views
4

即 - 我想返回一個字符串 「黃」 使用類似XPath表達式 「//香蕉/ @色」 和下面的示例XML ...我可以使用SimpleXML和Xpath直接選擇元素屬性嗎?

<fruits> 
<kiwi color="green" texture="hairy"/> 
<banana color="yellow" texture="waxy"/> 
</fruits> 


$fruits = simplexml_load_string(
'<fruits> 
<kiwi color="green" texture="hairy"/> 
<banana color="yellow" texture="waxy"/> 
</fruits>'); 

print_r($fruits->xpath('//banana/@color')); 

產生

Array 
(
    [0] => SimpleXMLElement Object 
     (
      [@attributes] => Array 
       (
        [color] => yellow 
       ) 

     ) 

) 

而我寧願像...

Array 
(
    [0] => SimpleXMLElement Object 
     (
      [0] => yellow 
     ) 

) 

...所以我不需要寫一個特殊情況到我正在寫的應用程序。

非常感謝! :)

回答

5

我剛剛給你的測試一槍,因爲我很好奇,我發現它確實產生字符串值yellow轉換爲字符串時。

$fruits = simplexml_load_string(
'<fruits> 
<kiwi color="green" texture="hairy"/> 
<banana color="yellow" texture="waxy"/> 
</fruits>'); 

$found = $fruits->xpath('//banana/@color'); 
echo $found[0]; 

看起來這只是如何表示SimpleXmlElement屬性節點。所以你可以使用這個作爲(string) $found[0]如果你不打印/直接回顯它。

當然,如果你依賴的價值仍然是SimpleXMLElement那麼這可能是一個問題,我想。但是我認爲只要記住在以後使用節點時將字符串轉換爲字符串仍然可行。

如果您確實需要一個支持Attribute作爲節點的節點的詳細界面,那麼您可能需要切換到DOMDocument。你的代碼會變得更加冗長,但是實現更加清晰。

相關問題