Почему IMPORT XML с XPATH возвращает неожиданный пустой ряд в дополнение к ожидаемому результату? - PullRequest
0 голосов
/ 18 апреля 2020

Я импортирую в Google Sheets с помощью IMPORT XML со следующим XPATH:

=IMPORTXML(A2;"//*[@id='mw-content-text']/div/table[1]/tbody/tr[4]/td[1]/ul/li")

A2, содержащий URL (https://stt.wiki/wiki/20th_Century_Pistol).

С веб-сайта я хочу импортировать записи списка в столбце «Basi c» и строке «Создано из» таблицы.

В этом разделе таблицы есть только две записи списка:

  • "x1 Basi c коды безопасности" и
  • "x4 Basi c Casing"

Поэтому я ожидал получить только эти два список записей в виде строк на моем листе. Вместо этого я получил дополнительную пустую строку над этими двумя записями. Однако, когда я меняю «td [1]» на «td [3]» в запросе XPATH, лишних пробелов нет.

Я не понимаю, откуда берется дополнительная пустая строка и как я можно избежать этого.

Google Sheet с желаемым и фактическим результатом

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Когда я увидел HTML URL-адреса, в теге ul есть 2 li тега. Поэтому я думаю, что ваш xpath правильный. Но из-за вашей проблемы я беспокоился, что тег sup может повлиять на эту ситуацию. Но я не уверен, является ли это прямой причиной. Поэтому я хотел бы предложить добавить атрибут li для вашего xpath следующим образом.

Modified xpath:

Когда ваш xpath изменен, пожалуйста, измените его следующим образом.

С :
//*[@id='mw-content-text']/div/table[1]/tbody/tr[4]/td[1]/ul/li
Кому:
//*[@id='mw-content-text']/div/table[1]/tbody/tr[4]/td[1]/ul/li[@style='white-space:nowrap']
  • При добавлении [@style='white-space:nowrap'] будет получено значение li с style='white-space:nowrap'.

Результат:

Формула =IMPORTXML(A1;"//*[@id='mw-content-text']/div/table[1]/tbody/tr[4]/td[1]/ul/li[@style='white-space:nowrap']"). Пожалуйста, поместите URL в ячейку "A1".

enter image description here

Примечание:

  • Также вы можете использовать xpath //*[@id='mw-content-text']/div/table[1]/tbody/tr[4]/td[1]/ul/li[position()>1].
1 голос
/ 18 апреля 2020

Для завершения очень аккуратного ответа @ Tanaike, другое выражение:

=IMPORTXML(A2;"//th[contains(.,'Crafted')]/following::td[1]//li[contains(@style,'white')]")

Если добавлена ​​пустая строка, это потому, что GoogleSheets анализирует дополнительный пустой элемент li, содержащий атрибут @style.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...