【问题标题】:Add CDATA to XML element with SimpleXML and WITHOUT dom_import_simplexml()使用 SimpleXML 和不使用 dom_import_simplexml() 将 CDATA 添加到 XML 元素
【发布时间】:2012-07-06 16:36:31
【问题描述】:

我有这个项目的最后期限(星期一)。它在 localhost 上运行良好,但是当我将它上传到我们的 Web 服务器时,我发现我们没有启用所有 DOM 包,并且我无法使用函数 dom_import_simplexml()。我的服务器管理员忽略了我的请求,可能是因为通知时间太短,而且我不可能这么快地将 XML 系统重写为数据库系统。

这似乎是我遇到的唯一错误。拜托,如果你有任何替代的想法,我很想听听。我很茫然,因为我找不到任何其他解决方案。我所要做的就是创建一些 XML 元素并用 CDATA 值填充它们,我不敢相信 SimpleXML 不支持!

请问,您能想到其他选择吗?我很开放,因为我不知道我能做什么。

  // Add a <pages /> element
  $xml->addChild('pages');
  // Populate it with data 
  foreach($pages as $page){
   $new = $xml->pages->addChild('page');
   $new->addAttribute('pid', $page['pid']);
   $new->addAttribute('title', $page['title']);
   if(isset($page['ancestor']))
    $new->addAttribute('ancestor', $page['ancestor']);
   $node = dom_import_simplexml($new);
   $no = $node->ownerDocument;
   $node->appendChild($no->createCDATASection($page['content']));
  }

最后三行显然行不通,我不知道我还能用它们做什么!

非常感谢您提供的任何帮助。

【问题讨论】:

  • 您的问题是dom_import_simplexml(),还是整个DOMDocument 类不存在? (如果你运行 $doc = new DOMDocument; 会发生什么)
  • 我收到一个致命错误,因为 DOMDocument 类不存在。

标签: php dom simplexml


【解决方案1】:

他们不支持这一点令人费解。你必须破解流。

$xml->node = '<![CDATA[character data]]>'; 
echo preg_replace('/\]\]&gt;</', ']]><', preg_replace('/&lt;!\[CDATA/','<![CDATA',  $xml->asXML()));

这是有问题的,也许这些字符串可能会出现在您的 cdata 中的某个地方。您必须承担的风险。

抱歉,我无法在截止日期前帮助您,但至少任何对使用 DOM 感到烦恼或无法使用它的人都会有各种解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2010-09-12
    • 2012-08-17
    • 2014-09-12
    • 2023-03-26
    相关资源
    最近更新 更多