2010-07-04 72 views
1

我从一个返回paginated XML的API中读取数据。 API的输出的基本格式是:如何重建分页的XML文档?

<candidates.list page="1" next_page="yes"> 
    <candidate /> 
    <candidate /> 
    <candidate /> 
</candidates.list> 

我的代码是这样的:

while (TRUE) { 
    $xml_str = file_get_contents($dest) 
    $xml = new SimpleXMLElement($xml_str); 

    // What should I do to append subsequent pages to my first page's XML? 

    if ($xml['next_page'] == 'yes') { 
    $dest = $new_destination; // I figure out the next page's API query here 
    } 
    else { 
    break; 
    } 
} 

return $xml; 

月的快乐第四,谢谢你!

+1

+1从夏天获得“七月四日快乐”! – 2010-07-04 16:53:48

回答

0

SimpleXML是该工作的错误工具。 SimpleXML不是设计用于添加新节点,或者真的进行任何类型的操作。我转而使用DOMDocument,并很快使用appendChild函数创建了一个解决方案。

0

我会将下一页的候选人添加到$xml。您已经将XML解析为SimpleXMLElement。或者如果你只关心这些,建立你自己的SimpleXMLElement候选对象。

作为便笺,while(1)是不良形式。您可以更改您的逻辑或使用do/while()循环。

快乐4回!

+0

我想问题是,我应该如何将下一页的候选人追加到$ xml中?除非我错过了一些东西,否则SimpleXML似乎没有简单的方法来添加新节点。 – Summer 2010-07-04 17:00:11

0

是的,您必须使用基于DOM的解决方案或使用(例如)SAX方法即时创建不同的数据结构。对于高吞吐量,DOM无法很好地扩展(对象内存占用非常大),所以如果这是您正在进行的唯一操作,那么如果需要扩展,您可能需要考虑SAX。