【问题标题】:Set inner HTML using QDomDocument使用 QDomDocument 设置内部 HTML
【发布时间】:2013-04-27 20:36:52
【问题描述】:

如何在 QDomElement 中设置内部 HTML?

当我使用QWebElement时,我有QWebElement::setInnerXml的方法,QDomElement中有一些类似的方法吗?

【问题讨论】:

    标签: qt dom qwebelement


    【解决方案1】:

    没有 API 可以将 XML sn-ps 作为文本“注入”到 QDomDocument(或 QXmlStreamWriter)中。必须使用 API 并以编程方式创建节点。

    【讨论】:

    • 话虽如此,很遗憾他们没有在 Qt DOM 中提供这样的功能。毕竟,您通常最终不得不这样做,并且他们已经编写了“完美”的解析器并且可以从内部访问......
    【解决方案2】:

    假设你有一个字符串开头,我当前的解决方案是从它生成一个 DOM 树,将该树导入片段中,然后将它们复制到正确的位置(你必须有一个导入,这就是为什么你需要一个中间片段。如果你问我,那就太不幸了。)

    // assuming that 'n' is the node you are replacing or at least inserting after
    // 'parent' is the parent of 'n'
    // 'result' is the string to replace 'n' or insert after 'n'
    QDomDocument doc_text("snap");
    doc_text.setContent("<text>" + result + "</text>", true, NULL, NULL, NULL);
    QDomDocumentFragment frag(xml.createDocumentFragment());
    frag.appendChild(xml.importNode(doc_text.documentElement(), true));
    QDomNodeList children(frag.firstChild().childNodes());
    const int max(children.size());
    QDomNode previous(n);
    for(int i(0); i < max; ++i)
    {
        QDomNode l(children.at(0));
        parent.insertAfter(children.at(0), previous);
        previous = l;
    }
    // if you are replacing, then delete node n as well
    parent.removeChild(n);
    

    请注意,使用了 标签,因此结果不需要是标签,它可以只是文本,它仍然可以工作。

    显然,如果您有来自另一个文档的片段或 XML 作为开始,请忽略在 doc_text 对象中创建该代码的代码。

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多