0

我正在尝试创建一个 XML 提要,本质上是一堆工作列表。我现在在数据库中有 39 个工作列表,我正在使用 SimpleXML 创建 XML,它工作得很好,除了它只在 xml 中输出数据库中的最后一条记录。我确信有一个简单的解决方案。

查看代码,我希望每个作业都在元素内,并且我希望为每个作业创建<job>一个新元素。<job>所有这些都包含在一个<source>元素中。这是我的 PHP 代码,下面是我得到的结果——你会看到只有一行返回,而不是全部 39。

<?php
Header('Content-type: text/xml');
class SimpleXMLExtended extends SimpleXMLElement {
  public function addCData($cdata_text) {
    $node = dom_import_simplexml($this);
    $no   = $node->ownerDocument;
    $node->appendChild($no->createCDATASection($cdata_text));
  }
}


$jobs = $dbjobs->find(array('job_title' => array('$exists' => true), 'job_title' => array('$nin'=> array('',' ', null))));
$jobs = iterator_to_array($jobs);
$xml = new SimpleXMLExtended('<source/>');
$i = 0;
foreach ($jobs as $job) {
  $i++;
  $xml->job = NULL;
  $j = $xml->job;
  $j->referencenumber = NULL;
  $j->referencenumber->addCData($job['id']);
  $j->title = NULL;
  $j->title->addCData($job['job_title']);
  $j->url = NULL;
  $j->url->addCData('http://www.site.com/joblisting.php?jl=' . $job['id']);
  $j->description = NULL;
  $j->description->addCData($job['job_description']);
  $j->company = NULL;
  $j->company->addCData($job['company']);
  $j->city = NULL;
  $j->city->addCData($job['city']);
  $j->state = NULL;
  $j->state->addCData($job['state']);
  $j->postalcode = NULL;
  $j->postalcode->addCData('');
  $j->country = NULL;
  $j->country->addCData('US');
  $j->date = NULL;
  $j->date->addCData(date("Y-m-d", $job['added']->sec));
  $j->site = NULL;
  $j->site->addCData('site.com');
  $j->count = NULL;
  $j->count->addCData($i);
}

print($xml->asXML());
?>

这是我得到的示例响应:

<source>
  <job>
    <referencenumber>230257</referencenumber>
    <title>Home Phone Representative</title>
    <url>http://www.site.com/joblisting.php?jl=230257</url>
    <description></description>
    <company>Media LLC</company>
    <city>San Jose</city>
    <state>CA</state>
    <postalcode></postalcode>
    <country>US</country>
    <date>2013-09-16</date>
    <site>site.com</site>
    <count>39</count>
  </job>
</source>

如您所见,它填充得很好,但我需要所有列表,而不仅仅是循环中的最后一个。提前感谢您的帮助。

4

2 回答 2

0
$xml->job = NULL;

是您的王线,因为您要取消最后一条记录。

一切$j->xxxxxx = NULL;都是无用的。

然后编码为

foreach ($jobs as $job) {
  $i++;
  $j = $xml->addChild('job');
  $j->referencenumber->addCData($job['id']);
  $j->title->addCData($job['job_title']);

 (...)

更好。

要了解有关查看SimpleXMLElement::addChild文档的更多信息。

于 2013-09-16T23:17:42.507 回答
0

您应该将 Childs 添加到根目录:

foreach ($jobs as $job) {
  $i++;
  $j=$xml->addChild('job')
  ...
于 2013-09-16T23:08:08.027 回答