PHP 从数据库中提取,转换为 XML 并附加到现有的 XML 文档
PHP Pull from database, convert to XML and append to existing XML document
我正在尝试从另一个 SimpleXMLElement 添加到一个 SimpleXMLElement,但出现错误:
Warning: SimpleXMLElement::addChild(): Cannot add child. Parent is not a permanent member of the XML tree
$xml = $Global->serializeTradeShowTable();
$xmlDeser = simplexml_load_string($xml);
$doc = simplexml_load_file($path);
$tradeshows = $doc->Tradeshows;
foreach($xmlDeser->item as $item)
{
$name = (string)$item->friendlyName;
$formatted_name = str_replace(' ', '_', $name);
$sxe = new \SimpleXMLElement("<option></option>");
$sxe->addAttribute('name', $formatted_name);
$sxe->addAttribute('value', $name);
$sxe[0] = $name;
$tradeshows->addChild($sxe);
}
我不确定为什么我不能将一种类型的 SimpleXMLElement 传递给另一种类型。是否需要某种类型的命名空间?任何帮助将不胜感激。
你有几个问题。我认为导致主要错误的第一个是线路问题...
$tradeshows = $doc->Tradeshows;
您需要检查这是否为您提供了您期望的节点。如果您的文档是(例如)
<Tradeshows>
</Tradeshows>
那么 $tradeshows 应该只是
$tradeshows = $doc;
但没有实际的 XML,很难判断。但这是您应该能够更正“Parent is not a permanent member”位的地方。
其次,addChild
采用元素的名称和可选的值。您正在尝试添加一个 SimpleXMLElement。如果您将代码更改为...
foreach($xmlDeser->item as $item)
{
$name = (string)$item->friendlyName;
$formatted_name = str_replace(' ', '_', $name);
$newElement = $tradeshows->addChild("option");
$newElement->addAttribute('name', $formatted_name);
$newElement->addAttribute('value', $name);
}
这个应该在里面加上<option>
然后设置属性
我正在尝试从另一个 SimpleXMLElement 添加到一个 SimpleXMLElement,但出现错误:
Warning: SimpleXMLElement::addChild(): Cannot add child. Parent is not a permanent member of the XML tree
$xml = $Global->serializeTradeShowTable();
$xmlDeser = simplexml_load_string($xml);
$doc = simplexml_load_file($path);
$tradeshows = $doc->Tradeshows;
foreach($xmlDeser->item as $item)
{
$name = (string)$item->friendlyName;
$formatted_name = str_replace(' ', '_', $name);
$sxe = new \SimpleXMLElement("<option></option>");
$sxe->addAttribute('name', $formatted_name);
$sxe->addAttribute('value', $name);
$sxe[0] = $name;
$tradeshows->addChild($sxe);
}
我不确定为什么我不能将一种类型的 SimpleXMLElement 传递给另一种类型。是否需要某种类型的命名空间?任何帮助将不胜感激。
你有几个问题。我认为导致主要错误的第一个是线路问题...
$tradeshows = $doc->Tradeshows;
您需要检查这是否为您提供了您期望的节点。如果您的文档是(例如)
<Tradeshows>
</Tradeshows>
那么 $tradeshows 应该只是
$tradeshows = $doc;
但没有实际的 XML,很难判断。但这是您应该能够更正“Parent is not a permanent member”位的地方。
其次,addChild
采用元素的名称和可选的值。您正在尝试添加一个 SimpleXMLElement。如果您将代码更改为...
foreach($xmlDeser->item as $item)
{
$name = (string)$item->friendlyName;
$formatted_name = str_replace(' ', '_', $name);
$newElement = $tradeshows->addChild("option");
$newElement->addAttribute('name', $formatted_name);
$newElement->addAttribute('value', $name);
}
这个应该在里面加上<option>
然后设置属性