如何使用php读取特定的XML节点

时间:2013-03-12 13:51:57

标签: php xml

如何使用php 5读取下面xml中的所有int值?

我正在尝试使用simplexml_load_string但无法获得确切的值。

我的PHP代码。

$xml = simplexml_load_string($result);
echo $xml->params[0]->param[0]->value[0]->array[0]->data[0]->value[0]->array[0]->data[0]->value[0]->int;

XML

<?xml version='1.0'?>
<methodResponse>
    <params>
        <param>
            <value><array><data>
                <value><array><data>
                    <value><int>51838</int></value>
                    <value><double>57.83089533672552</double></value>
                </data></array></value>
                <value><array><data>
                    <value><int>20820</int></value>
                    <value><double>56.58239590002292</double></value>
                </data></array></value>
                <value><array><data>
                    <value><int>49286</int></value>
                    <value><double>55.950788550857176</double></value>
                </data></array></value>
                <value><array><data>
                    <value><int>51843</int></value>
                    <value><double>55.09419216830168</double></value>
                </data></array></value>
            </data></array></value>
        </param>
    </params>
</methodResponse>

2 个答案:

答案 0 :(得分:1)

$domObj= new DOMDocument(); 
$domObj->load("test.xml");
$value= $domObj->getElementsByTagName("value");
foreach( $value as $val) 
{ 

 $ints = $val->getElementsByTagName("int"); 
 $intVal  = $ints->item(0)->nodeValue; 

 echo "$intVal"; 
}  

答案 1 :(得分:0)

不要评论XML中过于深入的嵌套。我会假设你有理由这样做。

$doc = new SimpleXMLElement($xml);
$valueList = $doc->xpath('/methodResponse/params/param/value/array/data/value');
while(list(, $node) = each($valueList)) {
    $intElement = $node->xpath('array/data/value/int');
    echo $intElement[0] . PHP_EOL;
}

将导致:

51838
20820
49286
51843

$valueList分配了所有value个节点的列表。第二个xpath查询获取每个节点中的int。在SimpleXMLElementxpath上阅读。