我想一個子元素追加到XML節點無法建立在XML節點空值
$rel->appendChild($domtree->createElement('title',NULL));
我希望它這樣
<title></title>
輸出,但我得到這個代替
<title/>
如何用空值創建它?
我想一個子元素追加到XML節點無法建立在XML節點空值
$rel->appendChild($domtree->createElement('title',NULL));
我希望它這樣
<title></title>
輸出,但我得到這個代替
<title/>
如何用空值創建它?
你需要明確添加一個空的文本節點:
$title = $domtree->createElement('title');
$title->appendChild($domtree->createTextNode(''));
$rel->appendChild($title);
的第二個參數createElement()
是非標準的,我個人不使用它,因爲它可以產生像這樣稍微直觀行爲。
在我看來,你應該總是明確地創建文本節點。這樣做的另一個原因是文本節點會自動正確地處理轉義,與需要手動轉義文本數據的非標準第二個參數不同。
哇,這是gr吃,謝謝... – 2013-03-19 15:37:17
以供將來參考,這裏是如何,你可以很容易地從陣列構建您的XML(包括空元素):
class Test {
public function getTestXml()
{
$testElements = [
'foo' => 'foo',
'bar' => 'bar',
'baz' => [
'empty' => null,
],
];
$xml = new \DOMDocument('1.0', 'UTF-8');
$test = $this->buildXmlNodeFromArray($xml, 'test', $testElements);
$xml->appendChild($test);
return $xml->saveXml();
}
/* Here's where all the magic happens */
private function buildXmlNodeFromArray(\DOMDocument $document, $nodeName, array $nodeElements)
{
$node = $document->createElement($nodeName);
foreach ($nodeElements as $key => $value) {
if (null === $value || '' === $value) {
$emptyValue = $document->createTextNode('');
$emptyElement = $document->createElement($key);
$emptyElement->appendChild($emptyValue);
$node->appendChild($emptyElement);
} elseif (is_array($value)) {
$subNode = $this->buildXmlNodeFromArray($document, $key, $value);
$node->appendChild($subNode);
} else {
$node->appendChild($document->createElement($key, $value));
}
}
return $node;
}
}
$test = new Test();
echo $test->getTestXml();
結果:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<foo>foo</foo>
<bar>bar</bar>
<baz>
<empty></empty>
</baz>
</test>
誰問這個問題的人做同樣的事情,你想要做的:[http://stackoverflow.com/questions/4516657/how-do-i-create-an-empty-blank-simplexmlelement-in-php](http://stackoverflow.com/questions/4516657/如何做,我創建一個空的空白Simplexmlelement在PHP) – Steven 2013-03-19 15:31:00
所以,我得到了答案... – 2013-03-19 15:40:02