我尝试在添加网页时自动更新我的站点地图。我定义了包含我需要的子名称的var,其中包含一个冒号字符。 PHP或XML正在删除它右侧或左侧的冒号和单词。如何将该冒号保留在子元素名称中?
我用这个:
<?php
$imagechild = 'image:image';
$imageloc = 'image:loc';
$xml=simplexml_load_file("sitemap.xml");
$map = $xml->addChild('url');
$map->addChild('loc', "http:/some website".$page_path);
$img = $map->addChild($imagechild);
$img->addChild($imageloc, $img_link);
$xml->saveXML('sitemap.xml');
?>
我得到了这个:
<url>
<loc>web url</loc>
<image>
<loc>image url</loc>
</image>
</url>
我需要这个
<url>
<loc>web url</loc>
<image:image>
<loc>image url</loc>
</image:image>
</url>
提前谢谢!
答案 0 :(得分:4)
如果元素名称包含:
,则:
之前的部分是名称空间前缀。如果您使用名称空间前缀,则需要在文档中的某处定义名称空间。
查看SimpleXmlElement::addChild()
的手册。您需要将名称空间uri作为第三个元素传递,以使其工作:
$img = $map->addChild($imagechild, '', 'http://your.namspace.uri/path');
我建议您使用DOMDocument
类来支持simple_xml扩展名。它可以更恰当地处理名称空间。检查此示例:
假设你有这个xml:
<?xml version="1.0"?>
<map>
</map>
这个PHP代码:
$doc = new DOMDocument();
$doc->load("sitemap.xml");
$map = $doc->documentElement;
// Define the xmlns "image" in the root element
$attr = $doc->createAttribute('xmlns:image');
$attr->nodeValue = 'http://your.namespace.uri/path';
$map->setAttributeNode($attr);
// Create new elements
$loc = $doc->createElement('loc', 'your location comes here');
$image = $doc->createElement('image:image');
$imageloc = $doc->createElement('loc', 'your image location comes here');
// Add them to the tree
$map->appendChild($loc);
$image->appendChild($imageloc);
$map->appendChild($image);
// Save to file
file_put_contents('sitemap.xml', $doc->saveXML());
你会得到这个输出:
<?xml version="1.0"?>
<map xmlns:image="http://your.namespace.uri/path">
<loc>your location comes here</loc>
<image:image>
<loc>your image location comes here</loc>
</image:image>
</map>