如何从simplexml中获取元素

时间:2013-05-02 13:14:24

标签: php xml simplexml

SimpleXMLElement Object
(
    [SMSMessage] => SimpleXMLElement Object
        (
            [Sid] => xyz
            [DateUpdated] => 2013-05-02 18:43:19
            [DateCreated] => 2013-05-02 18:43:19
            [DateSent] => 1970-01-01 05:30:00
            [AccountSid] => xx
            [To] => 09011148771
            [From] => xx
            [Body] => Hello
            [BodyIndex] => SimpleXMLElement Object
                (
                )

            [Status] => sending
            [Direction] => outbound-api
            [Price] => SimpleXMLElement Object
                (
                )

            [ApiVersion] => SimpleXMLElement Object
                (
                )

            [Uri] => /v1/Accounts/xx/Sms/Messages/xyz
        )

)

我试过了:

$xml->Sid;

但它会返回SimpleXMLElement Object ( )

我也尝试了$xml->title,它也返回了相同的SimpleXMLElement Object ( )

如何从上面的XMl

获取 Sid

4 个答案:

答案 0 :(得分:1)

我一直在摆弄并重新创建一个类似于你的结构:

$string='<?xml version="1.0"?>
<xml>
    <SMSMessage>
        <Sid>xyz</Sid>
        <DateUpdated>2013-05-02 18:43:19</DateUpdated>
    </SMSMessage>
</xml>';

$xml = new SimpleXMLElement($string);

print_r($xml);

此输出:

SimpleXMLElement Object
(
    [SMSMessage] => SimpleXMLElement Object
    ( 
        [Sid] => xyz
        [DateUpdated] => 2013-05-02 18:43:19
    )
)

哪个等于你的。我可以打印xyz:

echo $xml->SMSMessage->Sid;

尝试一下,你可能会遗漏一些父节点或其他东西。

答案 1 :(得分:0)

你的方法:要按照你想要的方式去做,我认为你必须更进一步调用,因为SimpleXMLObject是另一个SimpleXMLObject的父级。例如。 $xml->SMSMessage->Sid;。我通常建议在XML中使用xpath,因为在大多数情况下,您希望直接跳转到特定节点而不是遍历整个XML树。例如,$xml->xpath('//[node]')$xml->tier1->tier2->tier3->etc快。

首选方法:假设$xml代表您发布的SimpleXMLObject,您可以像这样访问Sid:$xml->xpath('//Sid');。这应该直接跳到树中的“Sid”节点。

答案 2 :(得分:0)

simplexml中,你总是需要施展你的价值观 - 所以你必须这样做:

echo $xml->Sid;

(echo自动投射)。或者明确地说:

$string = (string) $xml->id;

答案 3 :(得分:-1)

如果你有:

$string='<?xml version="1.0"?>
<xml>
    <SMSMessage>
        <Sid>xyz</Sid>
        <DateUpdated>2013-05-02 18:43:19</DateUpdated>
    </SMSMessage>
</xml>';

$xml = new SimpleXMLElement($string);

print_r('<pre>');
$Sid = (array)($xml->SMSMessage->Sid);
print_r($Sid[0]);
print_r($xml);

你可以这样访问Sid $Sid = (array)(xml->SMSMessage->Sid); echo $Sid[0]; 但是如果你更喜欢使用数组,你可以这样做:

$string='<?xml version="1.0"?>
<xml>
    <SMSMessage>
        <Sid>xyz</Sid>
        <DateUpdated>2013-05-02 18:43:19</DateUpdated>
    </SMSMessage>
</xml>';

$array= json_decode(json_encode(new SimpleXMLElement($string)), true);

print_r('<pre>');
print_r($array['SMSMessage']['Sid']);
print_r($array);