我在这里向您请教QXmlQuery和Xpath方面的帮助。我正在尝试使用这种组合从几个 HTML 文档中提取一些数据。下载这些文档,然后使用HTML Tidy Library进行清理。
问题是当我尝试我的 XPath 时。这是一个示例代码:
[...]
<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 "code" 中:
QStringList fields, values;
QXmlQuery query;
query.setFocus(code);
query.setQuery("//*[@id=\"idTab2\"]/*/*/string()");
query.evaluateTo(&fields);
我的目标是获取所有字段(Hauteur、Largeur、Profondeur、Poids 等)及其值(1127 mm、640 mm、685 mm、159.6 kg 等)。
问题 1
如您所见,我使用此 XPath//*[@id="idTab2"]/*/*/string()
来恢复字段,因为这 ://ul[@id="idTab2"]/li/span/string()
不起作用。当我尝试指定标签名称时,它什么也没给我。它仅适用于*
. 为什么 ?我检查了 tidy 函数返回的代码,XPath 没有改变。所以,我没有看到任何问题。这是正常的吗?或者也许有什么我不知道的...
问题2
在前面的 XHTML 代码中,li 标签包含一个 span 标签和一些文本。我不知道如何只获取文本而不是 span 标签的内容。我试过了 :
//*[@id="idTab2"]/*/string()
给出:Hauteur : 1127 mm Largeur : 640 mm Profondeur : 685 mm
//*[@id="idTab2"]/*[2]/string()
给出:Nothing
所以,如果我没记错的话, li 标签中的文本不被视为子节点,但它应该是。请参阅已接受的答案:直接在节点中选择文本,而不是在子节点中。
感谢阅读,希望有人可以帮助我。