可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
我正在使用变量来创建元素。但是我收到了这个错误:
Warning: DOMDocument::createElement() expects parameter 1 to be string, object given
// 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:
$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:
原始XML结构:
$result = $xml->saveXML();
我正在尝试创建一个新元素,其值是其自身的文本。我知道它看起来像什么。为什么我不能使用对象来创建元素?
我想要获得的结果将如下所示:
<products>
<product>
<name>text</name>
<name>text</name>
<name>text</name>
</product>
</products>
答案 0 :(得分:2)
您无法传递对象,您必须使用textContent
或nodeValue
属性:
$element = $xml->createElement(trim($a->textContent), 'anothervalue');
您可能还想先将其从非法字符中删除:
$nodeName = preg_replace('/[^a-z0-9_-]/i', '', $a->textContent);
$element = $xml->createElement($nodeName, 'anothervalue');
答案 1 :(得分:1)
在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);
}
答案 2 :(得分:0)
$parent_node->appendChild($xml->createElement($a->nodeValue, 'anothervalue'));
此get元素值,如果您想获取元素名称,请使用“$a->nodeName
”
答案 3 :(得分:0)
只需改变这一行
$ append [] = $ name;
要 $ append [] = $ name-&gt; tagName;
它应该工作