В Google Sheets я работаю над инструментом, позволяющим связывать информацию об определенных округах Конгресса США с соответствующими членами Конгресса. Чтобы облегчить обновление информации о том, какие Представители обслуживают какие районы, я решил использовать функцию IMPORTXML
для получения актуальных списков Членов и округов.
К счастью, клерк Палаты представителей США публикует обновленный xml-файл , содержащий всю необходимую мне информацию. Хотя я все еще пытаюсь справиться с запросами xpath в Sheets, я думаю, что у меня есть довольно простое представление о том, как применить его для этого проекта. Я обнаружил, что могу использовать следующую функцию для получения информации о штате и округе:
=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict")
И вот данные, которые возвращает функция:
Очевидно, что результаты продолжаются для всех 435 округов (на самом деле 441, потому что это включает и делегатов без права голоса), и я могу работать с этим. Проблемы, с которыми я сталкиваюсь, это когда я пытаюсь импортировать имена членов палаты с помощью следующей функции:
=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/member-info/namelist")
И вот что возвращает эта функция:
И снова результаты продолжаются и включают каждого Участника. НО, в настоящее время в палате нет 435 членов (441 включая делегатов) из-за некоторых вакансий. А функция IMPORTXML
, которая извлекает имена членов, возвращает только 438 имен, которые она может найти.
Это означает, что я не могу легко связать Участника с районом, просто используя два вызова IMPORTXML
в двух смежных столбцах (один с государством / районом, другой с именами), поскольку списки не выстраиваются, что можно увидеть в нижней части столбцов:
Я немного покопался и узнал, что могу использовать два запроса xpath в одном вызове IMPORTXML
, добавив |
между запросами. При этом с запросами xpath из предыдущих функций вызов IMPORTXML
выглядит следующим образом:
=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")
И он возвращает один столбец, в котором штат / район чередуются с такими именами:
Интересно, что когда я это делаю, имена соотносятся с их районами; когда появляется вакансия, функция импортирует район, пропускает несуществующее имя, импортирует следующий район, а затем следующее имя. Таким образом, когда дело доходит до пустующего района, это выглядит так (выходные данные выделены):
Однако для того, чтобы это было полезно, мне действительно нужно иметь эти данные в двух столбцах, один с данными штата / округа, а другой с именем соответствующего участника этого округа. Я пытаюсь узнать как можно больше о проблеме, но это далеко выходит за рамки всего, что я пытался сделать в прошлом, и далеко за пределами моей зоны комфорта. Вот где я сейчас нахожусь, и любая помощь на этом этапе будет искренне оценена.