Я здесь, чтобы спросить вас с помощью QXmlQuery и Xpath. Я пытаюсь использовать эту комбинацию для извлечения некоторых данных из нескольких HTML-документов. Эти документы загружаются, а затем очищаются с помощью HTML Tidy Library.Qt: QXmlQuery и XPaths
Проблема в том, что я пытаюсь использовать 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 "код":
QStringList fields, values;
QXmlQuery query;
query.setFocus(code);
query.setQuery("//*[@id=\"idTab2\"]/*/*/string()");
query.evaluateTo(&fields);
Моя цель состоит в том, чтобы получить все поля (высокомерие, Largeur, Profondeur, POIDS, и т.д. .) и их значение (1127 мм, 640 мм, 685 мм, 159,6 кг и т. д.).
Вопрос 1
Как вы можете видеть, я использую этот XPath //*[@id="idTab2"]/*/*/string()
для восстановления поля, потому что это: //ul[@id="idTab2"]/li/span/string()
не работает. Когда я пытаюсь указать имя тега, это ничего не дает. Он работает только с *
. Зачем ? Я проверил код, возвращаемый функцией tidy, и XPath не изменяется. Итак, я не вижу никакого пролета. Это нормально ? Или, может быть, есть что-то я не знаю ...
Вопрос 2
В предыдущем коде XHTML, теги Li обернуть поверочного тег и текст. Я не знаю, как получить только текст, а не содержимое тега 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.
Спасибо за чтение, надеюсь, кто-то может мне помочь.
Здравствуйте @paul т., спасибо за ответ, но это не похоже на работу тоже. Я думаю, проблема возникает из Qt, которая, похоже, не оценивает выражение XPath как ожидалось. Я не понимаю, почему ... Я буду искать больше об этом. – Pwet
ОК. Fyi, я тестировал тех, кто использует 'lxml' –