我正在使用变量来创建元素。但我收到此错误:
警告:DOMDocument :: createElement()期望参数1为字符串,给定对象
// load up your XML
$xml = new DOMDocument;
$xml->load('test.xml');
$parent_node = $xml->createElement('parent');
foreach ($xml->getElementsByTagName('product') as $product )
{
$append = array();
foreach($product->getElementsByTagName('name') as $name ) {
// Stick $name onto the array
$append[] = $name;
}
foreach ($append as $a) {
$parent_node->appendChild($xml->createElement($a, 'anothervalue'));
$product->appendChild($parent_node);
}
$product->removeChild($xml->getElementsByTagName('details')->item(0));
//$product->appendChild($element);
}
// final result:
$result = $xml->saveXML();
原始XML结构:
<products>
<product>
<name>text</name>
<name>text</name>
<name>text</name>
</product>
</products>
我正在尝试创建一个新元素,其值是其自身的文本。我知道它的外观。为什么不能使用对象创建元素?
我试图获得的结果将如下所示:
<products>
<product>
<text>text</text>
<text>text</text>
<text>text</text>
</product>
</products>
您不能传递对象,必须使用textContent
或nodeValue
属性:
$element = $xml->createElement(trim($a->textContent), 'anothervalue');
您可能还想先将其从非法字符中删除:
$nodeName = preg_replace('/[^a-z0-9_-]/i', '', $a->textContent);
$element = $xml->createElement($nodeName, 'anothervalue');
在foreach循环之前声明数组,否则每次循环完成时它将变为空
$append = array();
foreach ($xml->getElementsByTagName('product') as $product )
{
foreach($product->getElementsByTagName('name') as $name ) {
// Stick $name onto the array
$append[] = $name;
}
foreach ($append as $a) {
$parent_node->appendChild($xml->createElement($a, 'anothervalue'));
$product->appendChild($parent_node);
}
$product->removeChild($xml->getElementsByTagName('details')->item(0));
//$product->appendChild($element);
}
$parent_node->appendChild($xml->createElement($a->nodeValue, 'anothervalue'));
获得元素值,如果您想获得元素名称..请使用'$a->nodeName
'
只需更改这一行
$ append [] = $ name;
至$ append [] = $ name-> tagName;
然后应该起作用