如何使用对象作为PHP的createElement的参数

时间:2011-12-15 16:00:30

标签: php xml dom

  

可能重复:
  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>

4 个答案:

答案 0 :(得分:2)

您无法传递对象,您必须使用textContentnodeValue属性:

$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;

它应该工作