【发布时间】:2014-12-10 13:51:43
【问题描述】:
我有一个包含多个 t:subscription 子元素的 t:subscriptions 元素的 XML。
我的主要目标是将当前的t:subsciptions 整体或所有t:subsciption 元素替换为新元素。目前我已经创建了新的t:subscription 元素作为字符串(没有掌握 dom/simplexml 类,所以我不得不使用“后备”方法)。
现在我正在尝试通过 simplexml_load_string 然后 dom_import_simplexml 将字符串转换为 XML,以便在 XML 中附加/替换当前订阅。我尝试了以下从该站点找到的示例:
$newsubs = ''; //new XML as string
$sdom = new DOMDocument();
$sdom->loadXML($xml->asXML()); // current XML
//dpm($sdom->saveXML());
$xpath = new DOMXPath($sdom);
// ... x functions generate $newsubs string ...
$remove = $sdom->getElementsByTagName('subscriptions')->item(0); // get t:subscriptions for removal
$remove->parentNode->removeChild($remove); // remove t:subscriptions
$fragment = $sdom->createDocumentFragment();
$fragment->appendXml($newsubs);
$xpaths
->evaluate('//t:member') // this node holds t:subscriptions among others
->item(0) // there's always only one member node
->appendChild($fragment);
debug($sdom->saveXML());
到目前为止,我收到的唯一错误是Namespace prefix X on Y is not defined,这适用于所有元素。脚本会删除命名空间前缀,尽管它们是在 xml 字符串中定义的,例如 <t:myelement>asdasd</t:myelement>。
要添加此 XML 的 XML 文档已添加前缀。我不明白为什么它不能接受带前缀的 XML 并去掉前缀,而新的 XML 却被附加到文档中?没有意义。
【问题讨论】:
标签: php xml namespaces prefix