【问题标题】:Accessing text between two QWebElement objects访问两个 QWebElement 对象之间的文本
【发布时间】:2014-04-02 16:28:24
【问题描述】:

我正在使用 Qt 的 WebKit 类遍历 DOM。请查看以下伪 HTML:

<br>111<a class="node">AAA</a>
<br>222<a class="node">BBB</a>
...

我可以使用findAll() 轻松找到锚点。但是,我还需要在元素(“111”和“222”)之前获取文本。我尝试使用previousSibling(),但当然这给了我&lt;br&gt; 元素,因为“111”和“222”文本不是元素。

我找到了一个访问元素内文本的函数,但我如何访问 &lt;br&gt;&lt;a&gt; 元素之间?

【问题讨论】:

  • 你能修改这个 HTML 吗?
  • 不,我不能修改它。
  • 因此,如果您访问父级(不是兄弟级),并遍历其下的所有文本,它会给您...什么? "111\n222" 还是什么?
  • 使用anchorParent.toPlainText() (我想这就是你的意思)给我所有的父母及其所有后代的文本(111 AAA 222 BBB)。也许我可以以某种方式分析那段文本,但如果有一个更容易分析的 DOM,那就有点荒谬了。

标签: qt dom qtwebkit qwebkit qwebelement


【解决方案1】:

这似乎是不可能的。我能找到的唯一解决方法是获取父节点的纯文本并解析生成的纯文本。

【讨论】:

    【解决方案2】:

    这是我解决它的方法:

    QWebElement *element = ...
    
    // find out if QWebElement has text
    QDomDocument doc;
    doc.setContent(element->toOuterXml());
    QDomElement domelem = doc.documentElement();
    for(QDomNode n = domelem.firstChild(); !n.isNull(); n = n.nextSibling())
    {
        QDomText t = n.toText();
        if (!t.isNull())
        {
            // it has text !
            qDebug() << t.data();
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2021-08-21
      相关资源
      最近更新 更多