【问题标题】:How to append source html to a DOMElement in PHP?如何将源 html 附加到 PHP 中的 DOMElement?
【发布时间】:2011-06-12 16:38:57
【问题描述】:

有没有办法将源 html 附加到 DOMElement 中?像这样的:

$trElement->appendSource("<a href='?select_user=4'>Username</a>");

它会解析那个片段,然后附加它。

【问题讨论】:

    标签: php html dom appendchild


    【解决方案1】:

    你正在寻找

    - DOMDocumentFragment::appendXML — Append raw XML data

    手册示例:

    $doc = new DOMDocument();
    $doc->loadXML("<root/>");
    $f = $doc->createDocumentFragment();
    $f->appendXML("<foo>text</foo><bar>text2</bar>");
    $doc->documentElement->appendChild($f);
    echo $doc->saveXML(); 
    

    【讨论】:

    • 注意:您的 HTML 输入也必须是有效的 XML,否则会出错。我这样做的方法是创建另一个文档,将 HTML 加载到该文档中(作为 HTML,而不是 XML),然后将新创建的节点深度导入到我的原始文档中。
    • 如果由于添加外部代码而在DOMDocument::saveHTML() 上得到output conversion failed due to conv error,则需要强制转换为特定的编码标准,例如通过utf8_encode().
    【解决方案2】:

    如果您在范围内没有对document root 的引用,您始终可以通过任意节点的ownerDocument 属性访问它:

    $frag = $trElement->ownerDocument->createDocumentFragment();
    $frag->appendXML("<a href='?select_user=4'>Username</a>");
    $trElement->appendChild($frag);
    

    【讨论】:

      【解决方案3】:

      是的,您可以使用DOMDocument::createDocumentFragment

      $fragment = $dom->createDocumentFragment();
      $fragment->appendXML('<a href="select_user=4">Username</a>');
      $element->appendChild($fragment);
      

      在这种情况下,使用普通的createElement 调用会更简单:

      $el = $dom->createElement('a', 'Username');
      $el->setAttribute('href', 'select_user=4');
      $element->appendChild($el);
      

      在每种情况下,$element 都是您要附加代码的 DOM 元素。

      【讨论】:

      • "在这种情况下,使用普通的 createElement 调用会更简单:",这不是我的情况,因为在我的应用程序中我可以有任意输入,因此片段对此没问题.
      猜你喜欢
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2011-04-09
      • 2018-12-30
      • 1970-01-01
      • 2017-09-16
      相关资源
      最近更新 更多