我正在使用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
答案 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>