我的程序如下:<?php header('Content-Type: text/xml');
$url="http://open.client.lashou.com/list/api/";
$xml_str=file_get_contents($url);
$doc = new DOMDocument();
$doc->loadXML($xml_str);
$urllist = $doc->documentElement->getElementsByTagName( 'url');
$listcity=$doc->documentElement->getElementsByTagName("city");
$length=$urllist->length;
for($i=0;$i< $length; $i++)
{
$tmpcity=$listcity->item($i)->nodeValue;
if($tmpcity != "全国" && $tmpcity != "西安")
{
$urllist->item($i)->parentNode->removeChild($urllist->item($i));
}
}
echo $str=$doc->saveXML();
$f=fopen("f.xml","w");
fwrite($f,$str);
fclose($f);
?>程序的目的是要删除city不为全国和西安的节点所在的url节点,现在运行会提示“XML 文档只能有一个顶层元素”之类的错误。为了测试,我将xml保存在本地,删掉其中绝大部分,只剩下三个url节点。这时测试结果是:三个url节点中,如果只有一个的city为全国和西安以外的,运行可以顺利成功,但只要需要删除的url节点多于一个,就会出现错误,提示“XML 文档只能有一个顶层元素”。
请问下这是什么原因导致的,谢谢了
$url="http://open.client.lashou.com/list/api/";
$xml_str=file_get_contents($url);
$doc = new DOMDocument();
$doc->loadXML($xml_str);
$urllist = $doc->documentElement->getElementsByTagName( 'url');
$listcity=$doc->documentElement->getElementsByTagName("city");
$length=$urllist->length;
for($i=0;$i< $length; $i++)
{
$tmpcity=$listcity->item($i)->nodeValue;
if($tmpcity != "全国" && $tmpcity != "西安")
{
$urllist->item($i)->parentNode->removeChild($urllist->item($i));
}
}
echo $str=$doc->saveXML();
$f=fopen("f.xml","w");
fwrite($f,$str);
fclose($f);
?>程序的目的是要删除city不为全国和西安的节点所在的url节点,现在运行会提示“XML 文档只能有一个顶层元素”之类的错误。为了测试,我将xml保存在本地,删掉其中绝大部分,只剩下三个url节点。这时测试结果是:三个url节点中,如果只有一个的city为全国和西安以外的,运行可以顺利成功,但只要需要删除的url节点多于一个,就会出现错误,提示“XML 文档只能有一个顶层元素”。
请问下这是什么原因导致的,谢谢了
就会有
Fatal error: Call to a member function removeChild() on a non-object
这就是原因
<urlset />
你在gbk编码的环境下当然就不对了
要这样改
$tmpcity = $listcity->item($i)->nodeValue;
改为
$tmpcity = iconv('utf-8', 'gbk', $listcity->item($i)->nodeValue);
将head()这一行删除后能显示很多条,但是都是乱码!
原程序中有
$tmpcity = $listcity->item($i)->nodeValue;
if($tmpcity != "全国" && $tmpcity != "西安")
如果程序文件是utf-8编码的就不会有问题
如果程序文件是gbk编码的就得
$tmpcity = iconv('utf-8', 'gbk', $listcity->item($i)->nodeValue);
if($tmpcity != "全国" && $tmpcity != "西安")
否则下面的条件总是成立,也就将全部节点都删除了
还没有验证