首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt : QXmlQuery和XPaths

Qt : QXmlQuery和XPaths
EN

Stack Overflow用户
提问于 2013-08-26 09:47:08
回答 1查看 1.2K关注 0票数 2

我来这里是想请您在QXmlQuery和Xpath方面提供一些帮助。我试图使用这个组合从几个HTML文档中提取一些数据。这些文档将被下载,然后使用http://tidy.sourceforge.net/进行清理。

问题是当我尝试我的XPath时。下面是一个示例代码:

代码语言:javascript
复制
[...]
    <ul class="bullet" id="idTab2">
        <li><span>Hauteur :</span> 1127 mm</li>
        <li><span>Largeur :</span> 640 mm</li>
        <li><span>Profondeur :</span> 685 mm</li>
        <li><span>Poids :</span> 159.6 kg</li>
[...]

干净的代码存储在QString“代码”中:

代码语言:javascript
复制
QStringList fields, values;
QXmlQuery query;

query.setFocus(code);
query.setQuery("//*[@id=\"idTab2\"]/*/*/string()");
query.evaluateTo(&fields);

我的目标是得到所有的领域(豪特,大,亵渎,诗人,等等)其值(1127 mm,640 mm,685 mm,159.6 kg等)。

问题1

如您所见,我使用这个XPath //*[@id="idTab2"]/*/*/string()来恢复字段,因为//ul[@id="idTab2"]/li/span/string()不能工作。当我试图指定一个标签名时,它不会给我任何信息。它只适用于*。为什么?我检查了整洁函数返回的代码,XPath没有被修改。所以,我没看到任何问题。这正常吗?或者有件事我不知道..。

问题2

在前面的XHTML代码中,li标记封装了一个span标记和一些文本。我不知道如何只获取文本,而不知道span标记的内容。我试过:

//*[@id="idTab2"]/*/string()给出:Hauteur : 1127 mm Largeur : 640 mm Profondeur : 685 mm

//*[@id="idTab2"]/*[2]/string()给出:Nothing

因此,如果我没有错,li标记中的文本不是子节点,而是应该是。见已接受的答案:Select just text directly in node, not in child nodes

谢谢你的阅读,我希望有人能帮我。

EN

回答 1

Stack Overflow用户

发布于 2013-08-26 10:08:28

要获取不同<li>中的元素(而不是文本表示),可以测试文本内容:

代码语言:javascript
复制
//*[@id=\"idTab2\"]/li[starts-with(span, "Hauteur")]

其他物品也一样:

代码语言:javascript
复制
//*[@id=\"idTab2\"]/li[starts-with(span, "Largeur")]
//*[@id=\"idTab2\"]/li[starts-with(span, "Profondeur")]
//*[@id=\"idTab2\"]/li[starts-with(span, "Poids")]

要获得这些<li>的字符串表示形式,可以在整个表达式周围使用string(),如下所示:

代码语言:javascript
复制
string(//*[@id=\"idTab2\"]/li[starts-with(span, "Poids")])

"Poids : 159.6公斤“

要仅提取<li>中的文本节点,而不使用<span>,可以使用这些表达式选择<li>的直接子节点(<span>不是文本节点),并删除前导和尾随空格字符(normalize-space())。

代码语言:javascript
复制
normalize-space(//*[@id=\"idTab2\"]/li[starts-with(span, "Hauteur")]/text())
normalize-space(//*[@id=\"idTab2\"]/li[starts-with(span, "Largeur")]/text())
normalize-space(//*[@id=\"idTab2\"]/li[starts-with(span, "Profondeur")]/text())
normalize-space(//*[@id=\"idTab2\"]/li[starts-with(span, "Poids")]/text())

最后一张是"159.6公斤“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18441239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档