这是我的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,我应该在代码中更改
答案 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
应该有用。