【发布时间】:2018-05-21 18:38:41
【问题描述】:
有一个插件可以形成用于出口商品的 XML 文件。但是无论我怎么努力,我都无法在行首插入代码<?xml version = "1.0" encoding = "utf-8"?>。不幸的是,有必要对文件进行验证。现在产生这种方式:
<root>
<object>
<objectid></objectid>
<title></title>
<type></type>
...
</object>
<object>...</object>
...
</root>
我不是这个问题的专家,但我只会给出一段可能出现问题的代码:
public function onAjaxBTExport()
{
$xml = new SimpleXMLElementExtended('<root/>');
....
$data = $xml->asXML();
file_put_contents(JPATH_SITE.'/data.xml', $data);
header('Content-type: text/xml');
echo $data;
die;
}
class SimpleXMLElementExtended extends SimpleXMLElement
{
private function addCDataToNode(SimpleXMLElement $node, $value = '')
{
if ($domElement = dom_import_simplexml($node))
{
$domOwner = $domElement->ownerDocument;
$domElement->appendChild($domOwner->createCDATASection("{$value}"));
}
}
public function addChildWithCData($name = '', $value = '')
{
$newChild = parent::addChild($name);
if ($value) $this->addCDataToNode($newChild, "{$value}");
return $newChild;
}
public function addCData($value = '')
{
$this->addCDataToNode($this, "{$value}");
}
}
【问题讨论】:
-
“不幸的是,文件验证是必需的”——不应该。这些是默认值。仅当您为其中一个或两个属性使用非默认值时,才需要序言。