使用PHP在XML子元素名称中包含冒号

时间:2014-04-03 16:51:11

标签: php xml sitemap

我尝试在添加网页时自动更新我的站点地图。我定义了包含我需要的子名称的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>

提前谢谢!

1 个答案:

答案 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>