gpt4 book ai didi

php - 使用字符串将 XML 注入(inject)节点

转载 作者:可可西里 更新时间:2023-11-01 00:04:24 24 4
gpt4 key购买 nike

我正在重建一个子节点,方法是将它们作为字符串保存到一个数组中,将它们放入 XML 中,将一个新的子节点作为一个字符串插入到数组中……现在我想遍历数组并写入它们回到原来的节点。问题是我找不到任何关于如何使用字符串添加子节点的信息。

请参阅下面的代码。谢谢!!!

$xml = simplexml_load_file($url);

$questionGroup = $xml->qa[intval($id)];

$children = array(); // create empty array

foreach ($questionGroup->children() as $element) { // loop thru children
array_push($children, $element->asXML()); // save XML into array
}
//unset($questionGroup->answer);
//unset($questionGroup->question);

//create new node
$newNode = '<answer><title>'.$title.'</title><description>'.$description.'</description><subName>'.$subName.'</subName><date>'.$date.'</date><timestamp>'.$timestamp.'</timestamp></answer>';

echo "children count: ".count($children);
echo "<br /><br />";
print_r($children);
echo "<br /><br />";
// insert new
array_splice($children,intval($elementIndex),0,$newNode);
echo "children count: ".count($children);
echo "<br /><br />";
print_r($children);
echo "<br /><br />";
echo $questionGroup->asXML();
foreach ($children as $element) { // loop thru array
echo "<br /><br />";
echo $element;
//$questionGroup->addChild(simplexml_load_string($element)); // add array element to the empty questionGroup

}
echo "<br /><br />";
echo "questionGroup: ".$questionGroup;

更新:我找到了一个经过修改并能够正常工作的函数:

function append_simplexml(&$simplexml_to, &$simplexml_from)
{
$childNode = $simplexml_to->addChild($simplexml_from->getName(), "");
foreach ($simplexml_from->children() as $simplexml_child)
{
$simplexml_temp = $childNode->addChild($simplexml_child->getName(), (string) $simplexml_child);
foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
{
$simplexml_temp->addAttribute($attr_key, $attr_value);
}

// append_simplexml($simplexml_temp, $simplexml_child);
}
}

在我的 foreach() 循环中使用这个用法:

foreach ($children as $element) {  //  loop thru array 
append_simplexml($questionGroup, new SimpleXMLElement($element));
}

最佳答案

你不能用 SimpleXML 做到这一点独自的。使用 DOM 有一个很好的方法来做到这一点扩展和 DOMDocumentFragment类(class)。 (请注意,我并没有试图理解您在提供的示例中的逻辑,但您应该能够将下面的简单示例实现到您的代码中)。

$xml = simplexml_load_string('<root><parent/></root>');
// get the parent node under which you want to insert your XML fragement
$parent = dom_import_simplexml($xml->parent);
// create the XML fragment
$fragment = $parent->ownerDocument->createDocumentFragment();
// append the XML literal to your fragment
$fragment->appendXML('<child id="1"/><child id="2"><grandchild/></child>');
// append the fragment to the parent node
$parent->appendChild($fragment);
echo $xml->asXML();
/*
* <?xml version="1.0"?>
* <root><parent><child id="1"/><child id="2"><grandchild/></child></parent></root>
*/

链接:

关于php - 使用字符串将 XML 注入(inject)节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com