我正在用php代码编写一个站点地图文件。我能够根据要求正确地编写文件。但是我想将命名空间标签添加到xml文件的起始节点,我试着通过代码来做。但是得到了以下错误
Uncaught exception Exception with message 'String could not be parsed as XML'
以下是我的xml结构
<urlset>
<url>
<loc>url1</loc>
</url>
..
..
</urlset>
父节点下有多个url片段作为urlset。我想将sitemaps的命名空间标签添加到urlset节点。这是我唯一无法做到的事情.Xml文件相当大,我无法做到手动..
以下是我的xml格式代码
<?php
//Create Database connection
$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
}
/* if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
printf("Current character set: %s\n", $mysqli->character_set_name());
}
*/
$xml = new SimpleXMLElement('<xml/>');
for ($i = 0; $i < 2; $i++) {
// used to be: $query='select tablecolname1 from tablename limit 10000';
$start = $i * 50000;
$query = "select Siteurl from tablename limit $start, 50000";
$result = mysqli_query($mysqli,$query);
//Create SimpleXMLElement object
$xml = new SimpleXMLElement('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">');
while($row = mysqli_fetch_array($result)) {
$mydata = $xml->addChild('url');
$mydata->loc=$row['Siteurl'];
//htmlentities(strip_tags($mydata->loc=$row['Siteurl']), ENT_COMPAT,'utf-8');
}
// used to be: $fp = fopen("folder/file2.xml","wb");
$fp = fopen("site/sitemap$i.xml","wb");
fwrite($fp,utf8_encode($xml->asXML()));
fclose($fp);
}
$xml = new SimpleXMLElement('<urlset/>');
?>
请指导我如何将命名空间标记添加到urlset标记..
答案 0 :(得分:0)
SimpleXMLElement
期望根据documentation作为参数“格式良好的XML字符串”。
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
不是这样的字符串。
您可以(至少)以两种(简单)方式从PHP构建XML:
只能通过回显XML文件中所需的内容(包含标签):
header('Content-Type:text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="...">';
...
echo '</urlset>';
或使用SimpleXML对象并构建DOM树(参见documentation中的示例#10):
header('Content-Type:text/xml');
$xml=new SImpleXMLElement('<xml/>');
$urlset=$xml->addChild('urlset');
$urlset->addAttribute('xmlns','...');
...
echo $xml->asXML();