DOMDocument 不能改变 parentNode
DOMDocument cannot change parentNode
我无法将 DOMDocument
parentNode
从 null 更改为空。我尝试过同时使用 appendChild
和 replaceChild
,但没有成功。
我哪里错了?
error_reporting(E_ALL);
function xml_encode($mixed, $DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument;
$DOMDocument->formatOutput = true;
xml_encode($mixed, $DOMDocument);
echo $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->parentNode->appendChild($node);
}
}
}
$data = array();
for ($x = 0; $x <= 10; $x++) {
$data['urlset'][] = array(
'loc' => 'http://www.example.com/user',
'lastmod' => 'YYYY-MM-DD',
'changefreq' => 'monthly',
'priority' => 0.5
);
}
header('Content-Type: application/xml');
echo xml_encode($data);
?>
由于文档没有 parent 节点,您需要将根节点直接附加到文档中,如下所示:
$DOMDocument->appendChild($node);
这是有效的,因为 DOMDocument
扩展了 DOMNode
。
error_reporting(E_ALL);
function xml_encode($mixed, &$DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument;
$DOMDocument->formatOutput = true;
xml_encode($mixed, $DOMDocument);
return $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->appendChild($node);
}
}
}
$data = array();
for ($x = 0; $x <= 10; $x++) {
$data['urlset'][] = array(
'loc' => 'http://www.example.com/user',
'lastmod' => 'YYYY-MM-DD',
'changefreq' => 'monthly',
'priority' => 0.5
);
}
header('Content-Type: application/xml');
echo xml_encode($data);
顺便说一句,如果你只想序列化一个 XML 文件,DOM
有点开销。我会为此使用模板引擎,这意味着将其作为纯文本处理。
这应该可行,当您创建新的 DOMDocument 时您还没有根元素,因此您可以创建它并将其添加到文档中
//You could add this to the top of xml_encode
if($DOMDocument->parentNode === null) {
$root = $DOMDocument->createElement('root');
$root = $DOMDocument->appendChild($root);
}
//Your script working:
<?php
error_reporting(E_ALL);
function xml_encode($mixed, $DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument();
$DOMDocument->formatOutput = true;
//add here, but note that in the "else" it isn't sure if the DOMDocument has a root element
$root = $DOMDocument->createElement('root');
$root = $DOMDocument->appendChild($root);
xml_encode($mixed, $root);
echo $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->parentNode->appendChild($node);
}
}
}
我不确定您为什么需要 parentNode?你可以做 $DOMDocument->appendChild();
我无法将 DOMDocument
parentNode
从 null 更改为空。我尝试过同时使用 appendChild
和 replaceChild
,但没有成功。
我哪里错了?
error_reporting(E_ALL);
function xml_encode($mixed, $DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument;
$DOMDocument->formatOutput = true;
xml_encode($mixed, $DOMDocument);
echo $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->parentNode->appendChild($node);
}
}
}
$data = array();
for ($x = 0; $x <= 10; $x++) {
$data['urlset'][] = array(
'loc' => 'http://www.example.com/user',
'lastmod' => 'YYYY-MM-DD',
'changefreq' => 'monthly',
'priority' => 0.5
);
}
header('Content-Type: application/xml');
echo xml_encode($data);
?>
由于文档没有 parent 节点,您需要将根节点直接附加到文档中,如下所示:
$DOMDocument->appendChild($node);
这是有效的,因为 DOMDocument
扩展了 DOMNode
。
error_reporting(E_ALL);
function xml_encode($mixed, &$DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument;
$DOMDocument->formatOutput = true;
xml_encode($mixed, $DOMDocument);
return $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->appendChild($node);
}
}
}
$data = array();
for ($x = 0; $x <= 10; $x++) {
$data['urlset'][] = array(
'loc' => 'http://www.example.com/user',
'lastmod' => 'YYYY-MM-DD',
'changefreq' => 'monthly',
'priority' => 0.5
);
}
header('Content-Type: application/xml');
echo xml_encode($data);
顺便说一句,如果你只想序列化一个 XML 文件,DOM
有点开销。我会为此使用模板引擎,这意味着将其作为纯文本处理。
这应该可行,当您创建新的 DOMDocument 时您还没有根元素,因此您可以创建它并将其添加到文档中
//You could add this to the top of xml_encode
if($DOMDocument->parentNode === null) {
$root = $DOMDocument->createElement('root');
$root = $DOMDocument->appendChild($root);
}
//Your script working:
<?php
error_reporting(E_ALL);
function xml_encode($mixed, $DOMDocument=null) {
if (is_null($DOMDocument)) {
$DOMDocument =new DOMDocument();
$DOMDocument->formatOutput = true;
//add here, but note that in the "else" it isn't sure if the DOMDocument has a root element
$root = $DOMDocument->createElement('root');
$root = $DOMDocument->appendChild($root);
xml_encode($mixed, $root);
echo $DOMDocument->saveXML();
} else {
if (is_array($mixed)) {
$node = $DOMDocument->createElement('urlset', 'hello');
$DOMDocument->parentNode->appendChild($node);
}
}
}
我不确定您为什么需要 parentNode?你可以做 $DOMDocument->appendChild();