simpleXML节点按索引问题访问

时间:2011-01-22 21:37:03

标签: php xml simplexml

我收到基于我发送给服务器的请求的XML响应,它确实返回了一组有效的结果,我可以使用print_r()将其转储到屏幕上 结果集如下所示(编辑:这是文件的确切结构):

<root>  
     <main_node1>  
         <value1>one</value1>  
         <value2>two</value2>  
     </main_node1>  
     <main_node2>  
         <anothervalue>whatever</anothervalue>  
     </main_node2>  
     <recordset>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
     </recordset>  
</root>

当我使用该行时:

$xml = simplexml_load_string($xmlRequest);
$records = $xml->recordset->record;  

当我尝试使用诸如

之类的索引访问记录集中的特定记录时,我可以使用foreach循环遍历$ records数组而没有任何问题
$record = $xml->recordset->record[$index];  

我收到了一个N​​ULL valeu。我也尝试将结果转换为(数组)到目前为止没有成功。

我看过的关于simpleXML的每个文档都说可以通过索引访问XML节点,有人可以告诉我这里可能做错了吗?

编辑:所以记录集不是文档的根目录但我可以使用$ xml-&gt;记录集 - &gt;记录表示法将记录列表加载到我的$ records变量中并使用foreach循环。

3 个答案:

答案 0 :(得分:1)

我使用

解决了我的问题
$records = $xml->xpath('//record'); 

符号,我现在可以通过索引访问任何记录。

感谢您的努力,感谢您的努力。

答案 1 :(得分:0)

你没有得到任何回报,因为'recordset'节点是$ xml变量的根(不确定我是否正确描述了这一点)。

这应该有效:

<?php
    //Example xml, replace this with $xml = simplexml_load_string($xmlRequest);
    $xml = simplexml_load_string('<?xml version="1.0"?>
    <recordset><record><value1>one</value1><value2>two</value2></record>
    <record><value1>one</value1><value2>two</value2></record>
    </recordset>');

    $record = $xml->record[0];
    print_r ($record);

&GT;

答案 2 :(得分:0)

另一种不使用xpath的方法是:

以此为基础:

 $record = $xml->recordset->record[$index];

你必须将索引设为int,因为某些原因只是接收它不起作用。所以:

$index = trim($_GET['index']);
$index = intval($index);

现在这将有效:

 $record = $xml->recordset->record[$index];

最诚挚的问候, RaphaelDDL