Php 如何解析XML键:值对

Php 如何解析XML键:值对,php,xml,Php,Xml,我有一个客户端服务器返回以下(奇怪的)XML响应;如何访问每个键:值对 $xml = '<?xml version="1.0"?> <response> <string key="__status">success</string> <string key="id">1000</string> <string key="mask">9999</string> </re

我有一个客户端服务器返回以下(奇怪的)XML响应;如何访问每个键:值对

$xml = '<?xml version="1.0"?>
  <response>
    <string key="__status">success</string>
    <string key="id">1000</string>
    <string key="mask">9999</string>
</response>';
<pre>
<?php
$xml = '<?xml version="1.0"?>
  <response>
    <string key="__status">success</string>
    <string key="id">1000</string>
    <string key="mask">9999</string>
</response>';

$test = new SimpleXMLElement($xml);
echo "Mask = ".$test->string[2];
?>
</pre>

如果我的内存服务器正确
simplexml
是扩展名。你确定你安装了它吗?顺便说一句,
simplexml
是在PHP5.0中添加的,因此如果我的内存服务器me right
simplexml
是扩展名,请确保您没有运行较低版本。你确定你安装了它吗?顺便说一句,
simplexml
是在PHP5.0中添加的,因此请确保您没有运行较低版本

如果您需要特定元素,可以使用XPath:

$matches = $test->xpath('//string[@key="mask"]');
(这需要PHP5.2)

这将给你:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [key] => mask
                )

            [0] => 9999
        )
)   
如果需要所有元素,则必须迭代所有
string
元素并访问它们的文本和
key
属性:

$items = array();

foreach($test->string as $item) {
    $items[(string) $item->attributes()->key] = (string) $item;
}
给出:

Array
(
    [__status] => success
    [id] => 1000
    [mask] => 9999
) 

如果需要特定元素,可以使用XPath:

$matches = $test->xpath('//string[@key="mask"]');
(这需要PHP5.2)

这将给你:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [key] => mask
                )

            [0] => 9999
        )
)   
如果需要所有元素,则必须迭代所有
string
元素并访问它们的文本和
key
属性:

$items = array();

foreach($test->string as $item) {
    $items[(string) $item->attributes()->key] = (string) $item;
}
给出:

Array
(
    [__status] => success
    [id] => 1000
    [mask] => 9999
) 

字符串[2];
?>
这是工作代码。


字符串[2];
?>


这是工作代码。

您必须迭代
字符串
元素,并访问它们的文本及其
属性。@Felix Kling我就是这么想的,只是检查是否有更简单的方法。XML的这种结构是否格式良好?是的。如果你想要一个特定的元素,你也可以使用XPath。你必须迭代
字符串
元素,访问它们的文本和
属性。@Felix Kling我就是这么想的,只是检查是否有更简单的方法。XML的这种结构是否格式良好?是的。如果需要特定元素,也可以使用XPath。请检查我的答案。它更简单。我对这个解决方案很满意。检查我的答案。它更简单。我对这个解决方案很满意。抱歉,这不起作用,因为我无法保证我将接收的元素的顺序或数量。它解决了这个特定的实例,但不是一般的问题。但我要解决OP问题中的语法错误。无论如何,FELIX提出的正确问题要好得多。Freak对原始问题的模糊性表示抱歉,我认为说来自客户端服务器的数据足够好,这暗示数据可能在不断变化。@Michael Pasqualone-没问题,伙计。:)抱歉,这不起作用,因为我无法保证我将接收的元素的顺序或数量。它解决了这个特定实例,但不是一般问题。但我要解决OP问题中的语法错误。无论如何,FELIX提出的正确问题要好得多。Freak对原始问题的模糊性表示抱歉,我认为说来自客户端服务器的数据足够好,这暗示数据可能在不断变化。@Michael Pasqualone-没问题,伙计。:)