Требуется помощь Xpath для вывода XML - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь использовать Xpath, чтобы получить DataTable Заголовки.

Мой вывод должен быть:

ItemNum | Пункт | ResultCode | Статус | ExtBackLinks | RefDomains | AnalysisResUnitsCost | ACRank | ItemType | IndexedURLs | GetTopBackLinksAnalysisResUnitsCost | DownloadBacklinksAnalysisResUnitsCost | DownloadRefDomainBacklinksAnalysisResUnitsCost | RefIPs | RefSubNets | RefDomainsEDU | ExtBackLinksEDU | RefDomainsGOV | ExtBackLinksGOV | RefDomainsEDU_Exact | ExtBackLinksEDU_Exact | RefDomainsGOV_Exact | ExtBackLinksGOV_Exact | CrawledFlag | LastCrawlDate | LastCrawlResult | RedirectFlag | FinalRedirectResult | OutDomainsExternal | OutLinksExternal | OutLinksInternal | OutLinksPages | LastSeen | Название | RedirectTo | Язык | LanguageDesc | LanguageConfidence | LanguagePageRatios | LanguageTotalPages | RefLanguage | RefLanguageDesc | RefLanguageConfidence | RefLanguagePageRatios | RefLanguageTotalPages | CrawledURLs | RootDomainIPAddress | TotalNonUniqueLinks | NonUniqueLinkTypeHomepages | NonUniqueLinkTypeIndirect | NonUniqueLinkTypeDeleted | NonUniqueLinkTypeNoFollow | NonUniqueLinkTypeProtocolHTTPS | NonUniqueLinkTypeFrame | NonUniqueLinkTypeImageLink | NonUniqueLinkTypeRedirect | Non UniqueLinkTypeTextLink | RefDomainTypeLive | RefDomainTypeFollow | RefDomainTypeHomepageLink | RefDomainTypeDirect | RefDomainTypeProtocolHTTPS | CitationFlow | TrustFlow | TrustMetric | TopicalTrustFlow_Topic_0 | TopicalTrustFlow_Value_0 | TopicalTrustFlow_Topic_1 | TopicalTrustFlow_Value_1 | TopicalTrustFlow_Topic_2 | TopicalTrustFlow_Value_2

Это оригинальный XML:

<Result Code="OK" ErrorMessage="" FullError="">
<GlobalVars FirstBackLinkDate="2012-09-21" IndexBuildDate="2018-05-24 19:47:18" IndexType="0" MostRecentBackLinkDate="2018-04-23" QueriedRootDomains="1" QueriedSubDomains="0" QueriedURLs="0" QueriedURLsMayExist="0" ServerBuild="2018-06-11 13:52:01" ServerName="BRUNO28" ServerVersion="1.0.6736.23160" UniqueIndexID="20180524194718-HISTORICAL"/>
<DataTables Count="1">
<DataTable Name="Results" RowsCount="1" Headers="ItemNum|Item|ResultCode|Status|ExtBackLinks|RefDomains|AnalysisResUnitsCost|ACRank|ItemType|IndexedURLs|GetTopBackLinksAnalysisResUnitsCost|DownloadBacklinksAnalysisResUnitsCost|DownloadRefDomainBacklinksAnalysisResUnitsCost|RefIPs|RefSubNets|RefDomainsEDU|ExtBackLinksEDU|RefDomainsGOV|ExtBackLinksGOV|RefDomainsEDU_Exact|ExtBackLinksEDU_Exact|RefDomainsGOV_Exact|ExtBackLinksGOV_Exact|CrawledFlag|LastCrawlDate|LastCrawlResult|RedirectFlag|FinalRedirectResult|OutDomainsExternal|OutLinksExternal|OutLinksInternal|OutLinksPages|LastSeen|Title|RedirectTo|Language|LanguageDesc|LanguageConfidence|LanguagePageRatios|LanguageTotalPages|RefLanguage|RefLanguageDesc|RefLanguageConfidence|RefLanguagePageRatios|RefLanguageTotalPages|CrawledURLs|RootDomainIPAddress|TotalNonUniqueLinks|NonUniqueLinkTypeHomepages|NonUniqueLinkTypeIndirect|NonUniqueLinkTypeDeleted|NonUniqueLinkTypeNoFollow|NonUniqueLinkTypeProtocolHTTPS|NonUniqueLinkTypeFrame|NonUniqueLinkTypeImageLink|NonUniqueLinkTypeRedirect|NonUniqueLinkTypeTextLink|RefDomainTypeLive|RefDomainTypeFollow|RefDomainTypeHomepageLink|RefDomainTypeDirect|RefDomainTypeProtocolHTTPS|CitationFlow|TrustFlow|TrustMetric|TopicalTrustFlow_Topic_0|TopicalTrustFlow_Value_0|TopicalTrustFlow_Topic_1|TopicalTrustFlow_Value_1|TopicalTrustFlow_Topic_2|TopicalTrustFlow_Value_2" MaxTopicsRootDomain="30" MaxTopicsSubDomain="20" MaxTopicsURL="10" TopicsCount="3">
<Row>
0|nu.nl|OK|Found|508322106|165344|508322106|-1|1|4149991|5000|512472097|3356880|59147|26204|233|3613|43|308|73|1757|4|12|False| | |True| |5|10|44|1722150| |NU - Het laatste nieuws het eerst op NU.nl|https://www.nu.nl/|nl|Dutch/Flemish|92|99.9|482980|nl,en,de|Dutch/Flemish,English,German|87,93,58|96.5,3.1,0.1|76319583|1915923|52.85.201.19|611833777|15034990|53120677|444371798|95283418|52384870|388104|53497551|5655999|552292123|102171|115787|21952|150164|49554|76|70|70|News/Breaking News|69|Sports/Resources|45|Arts/Radio|43
</Row>
</DataTable>
</DataTables>
</Result>

Когда я использую эту команду Xpath в Google Sheets :

=importxml("http://enterprise.majesticseo.com/api_command?privatekey=xxx&accessToken=xxx&cmd=GetIndexItemInfo&item0=nu.nl&items=1","//DataTable"

Я получаю результаты Row. Это здорово, но мне также нужны имена заголовков в первом ряду моего листа.

1 Ответ

0 голосов
/ 26 июня 2018

краткое введение в XPath: -)

С //DataTable вы получите полный узел любого <DataTable> (здесь не задействованы пространства имен) в любом месте XML.
Как правило, лучше быть как можно более конкретным (лучше использовать /Result/DataTables/DataTable). Но это не ответ на ваш вопрос ...

Просто представьте себе XML-код:

<root>
  <innerNode attr="1"><a>Some a content</a><b>Some b content</b></innerNode>
  <innerNode attr="2"><a>aaa</a><b>bbb</b></innerNode>
</root>

С /root/innerNode вы получите оба <innerNode> со всем контентом.

С /root/innerNode[(b/text())[1]="bbb"] вы получите только один <innerNode>, тот, где <b> s text() равен "bbb"

С /root/innerNode[@attr="1"] вы получите единицу <innerNode>, где атрибут attr имеет значение "2".

Все три XPath выборки возвращают полный узел, включая подузлы, атрибуты, что угодно.

если вам нужно только значение атрибута, вы должны запросить его:

(/root/innerNode/@attr)[2] 

... возвращает значение атрибута второго <innerNode> (фактически, 2-го появления)

/root/innerNode[(b/text())[1]="Some b content"]/@attr

... возвращает значение атрибута <innerNode>, где <b> имеет text() 0f "Some b content"

вернуться к вашему вопросу

Вы хотите прочитать атрибут Headers в элементе <DataTable>, проживающем в /Result/DataTables. Просто используйте

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