使用DOMDocument创建图像标记失败

时间:2012-06-29 10:54:26

标签: php domdocument

我正在使用DOMDocument生成XML,而这个XML必须有一个图像标记。

不知何故,当我做(简化)

$response = new DOMDocument();
$actions = $response->createElement('actions');
$response->appendChild($actions);

$imageElement = $response->createElement('image'); 
$actions->appendChild($imageElement);

$anotherNode = $response->createElement('nodexy');
$imageElement->appendChild($anotherNode);

导致

 <actions>
    <img>
    <node></node>
 </actions>

如果我将'image'更改为'images'或甚至'img',它就可以了。当我从PHP 5.3.10切换到5.3.8时,它也能正常工作。

这是一个错误还是一个功能?我的猜测是DOMDocuments假设我想构建一个HTML img元素......我可以以某种方式阻止它吗?

奇怪的是:我无法在同一台服务器上的另一个脚本中重现错误。但我没有抓住这种模式......

这是该类的完整pastebin,导致错误:http://pastebin.com/KqidsssM

3 个答案:

答案 0 :(得分:2)

这花了我两个小时。

DOMDocument正确呈现XML。 XML是由ajax调用返回的,并且在显示它之前,浏览器/ javascript会以某种方式将其更改为img ...

答案 1 :(得分:0)

第44行的$imageAction->getAction()是否有可能返回'img'?你有var_dump()编辑吗?在任何情况下,我都不会看到DOM如何将“image”转换为“img”。

答案 2 :(得分:0)

我认为它表现为“html doc” 尝试添加版本号“1.0”

代码

<?php

    $response = new  DOMDocument('1.0','UTF-8');
    $actions = $response->createElement('actions');
    $response->appendChild($actions);

    $imageElement = $response->createElement('image'); 
    $actions->appendChild($imageElement);

    $anotherNode = $response->createElement('nodexy');
    $imageElement->appendChild($anotherNode);

    echo $response->saveXML();

输出:

  <?xml version="1.0" encoding="UTF-8" ?> 
     <actions>
       <image>
         <nodexy /> 
       </image>
     </actions>

您也可以使用SimpleXML

示例:

<?php
    $response = new SimpleXMLElement("<actions></actions>");
    $imageElement = $response->addChild('image');
    $imageElement->addChild("nodexy");

    echo $response->asXML();

输出:

 <?xml version="1.0" ?> 
    <actions>
      <image>
        <nodexy /> 
      </image>
   </actions>