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

发布于 2024-12-21 07:43:04 字数 1276 浏览 0 评论 0原文

我正在使用变量来创建元素。但我收到这个错误:

警告: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>

I'm using a variable to create an element. But I'm getting this error:

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:

$result = $xml->saveXML();

Original XML structure:

<products>
 <product>
 <name>text</name>
 <name>text</name>
 <name>text</name>
 </product>
 </products>

I'm trying to create a new element whose value is the text of itself. I know what it has to look like. Why can't I use an object to create an element?

The result I'm trying to obtain will look like this:

 <products>
 <product>
 <text>text</text>
 <text>text</text>
 <text>text</text>
 </product>
 </products>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱她像谁 2024-12-28 07:43:04

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

$element = $xml->createElement(trim($a->textContent), 'anothervalue');

您可能还想首先将其从非法字符中删除:

$nodeName = preg_replace('/[^a-z0-9_-]/i', '', $a->textContent);
$element = $xml->createElement($nodeName, 'anothervalue');

You can't pass an object, you must use the textContent or nodeValue properties:

$element = $xml->createElement(trim($a->textContent), 'anothervalue');

You may also want to strip it from illegal characters first:

$nodeName = preg_replace('/[^a-z0-9_-]/i', '', $a->textContent);
$element = $xml->createElement($nodeName, 'anothervalue');
鹤仙姿 2024-12-28 07:43:04

在 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);
    }

declare the array befor the foreach loop otherwise it will become empty every time when one loop will complete

    $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);
    }
南风起 2024-12-28 07:43:04
$parent_node->appendChild($xml->createElement($a->nodeValue, 'anothervalue'));

这个获取元素值,如果你想获取元素名称..使用'$a->nodeName'

$parent_node->appendChild($xml->createElement($a->nodeValue, 'anothervalue'));

This get element value, if you wanna get the element name .. use '$a->nodeName'

所有深爱都是秘密 2024-12-28 07:43:04

只需更改这一行

$append[] = $name;


$append[] = $name->tagName;

那么它应该可以工作

Just change this one line

$append[] = $name;

to
$append[] = $name->tagName;

It should work then

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文