使用SimpleXML的DOM不使用PHP在浏览器中以XML格式显示数据

时间:2012-07-22 16:27:49

标签: php dom simplexml

这是我的PHP代码,使用SimpleXML和DOM从URL读取XML以更改某些参数并在网页上显示

我正在阅读的Feed是http://tinyurl.com/boy7mr5

<?php

  $xml = simplexml_load_file('http://www.abc.com');


  $doc = new DOMDocument();
  $doc->formatOutput = true;

  $r = $doc->createElement( "All_Products" );
  $doc->appendChild( $r );

  foreach( $xml as $Product)
  {


 $b = $doc->createElement( "Product" );
   $doc->appendChild( $b );

  foreach($Product as $prname=>$value)
  {


  $prname1  = $doc->createElement( $prname );
  $prname1->appendChild(
  $doc->createTextNode( $value )
  );
  $b->appendChild($prname1);
  if($prname=='ProductName')
  {

  $ProductURL = $doc->createElement( "ProductURL" );
  $ProductURL->appendChild(
  $doc->createTextNode('http://www.abc.com/'.$Product->ProductName.'-p/'.$Product->ProductCode .'.htm' )
  );
  $b->appendChild( $ProductURL );

  }
  if($prname=='Categories'){

foreach($value as $catname=>$catvalue)
  {
   $c = $doc->createElement( "Category" );
   $doc->appendChild( $c );
  foreach($catvalue as $catname1=>$catvalue1)
  {
 // echo $catname1."==".$catvalue1;
    $catname12 = $doc->createElement( $catname1);
  $catname12 ->appendChild(
  $doc->createTextNode(htmlspecialchars_decode($catvalue1) )
  );
  $c->appendChild( $catname12);

  }
   $prname1->appendChild( $c );
  }
  }


  }
  $r->appendChild( $b );

  }
  echo $doc->saveXML();

  ?>

最后一行按原样打印所有XML,但它会显示垃圾数据,您可以在此网址http://tinyurl.com/bty8286看到。

我希望数据在浏览器中看起来像http://tinyurl.com/boy7mr5,我应该在代码中更改

1 个答案:

答案 0 :(得分:1)

这是Content-Type HTTP header的问题。第二个链接使用application/xml,而第一个链接使用php的默认text/html。您可以使用header()函数更改PHP脚本的HTTP标头。

header('content-type: application/xml');

编辑:

我已经能够获取原始输入,唯一的标题没有使它工作(至少在firefox中),在48580行得到解析错误,这是由于没有编码设置为{{1对象,而原始输入是在utf-8中。与

DOMDocument

应该有用。