首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使某些标记不存在,如何在xpath中始终具有相同数量的结果?

即使某些标记不存在,如何在xpath中始终具有相同数量的结果?
EN

Stack Overflow用户
提问于 2016-11-13 20:32:30
回答 2查看 188关注 0票数 2

我试着从网站上抓取数据。目标是不总是给出所有细节的站点。例如,一个配置文件提供了name, birthday,而另一个配置文件只提供了name

我现在试着用xidel和xpath来掌握这个标签,当有时候不会有几个标签丢失的时候(因为不存在某个特定的细节),这将会很有吸引力。

所以我要求一个解决方案,我可以用一个空的标签填充这些不存在的标签,这样我就可以得到一组相同长度的数据。

之后,我将数据转换为csv,当缺少标记时,所有数据都将关闭一列。

我的xidel请求如下所示:

代码语言:javascript
运行
复制
xidel 'http://www.icaec.org/users/index' -f '//section[@id="content-area"]//article//h5/a' -e 'concat("`",join(//div[@id="members-info"]/(h5 | span) | //div[@class="row pic-professionsal-details"]/div[2]/div | //div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div,"`;`"),"`")' | sed "s/\"/\\\"/g" | sed "s/\`/\"/g" >> icaec.csv

有问题的xpath表达式如下所示:

代码语言:javascript
运行
复制
'concat("`",join(//div[@id="members-info"]/(h5 | span) | //div[@class="row pic-professionsal-details"]/div[2]/div | //div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div,"`;`"),"`")'

它或多或少是

代码语言:javascript
运行
复制
//div[@id="members-info"]/(h5 | span)
//div[@class="row pic-professionsal-details"]/div[2]/div
//div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div
EN

回答 2

Stack Overflow用户

发布于 2016-11-14 00:11:46

XQuery支持XPath和Xidel 3.0,因此您可以创建序列,使用某些默认值替换缺少的项目,例如给定

代码语言:javascript
运行
复制
<items>
  <item>
    <foo>foo 1</foo>
    <bar>bar 1</bar>
  </item>
  <item>
    <foo>foo 2</foo>
  </item>
  <item>
    <bar>bar 3</bar>
  </item>
</items>

XQuery 3.0表达式

代码语言:javascript
运行
复制
string-join(//item!string-join(((foo, 'foo default')[1], (bar, 'bar default')[1]), ';'), '&#10;')

输出

代码语言:javascript
运行
复制
foo 1;bar 1
foo 2;bar default
foo default;bar 3
票数 2
EN

Stack Overflow用户

发布于 2016-11-13 22:46:56

XPath用于对存在于XML文档中的节点进行selection。不能选择尚不存在的节点。(XQuery:有关/XPath3.0如何在创建序列时指定默认值的信息,请参阅Martin Honnen's answer。今年的Xidel已经更新,完全支持XQuery/XPath3.0。)

XSLT用于transformation文档,可以重新排列节点或创建新的节点。您的需求已经从选择发展到了转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40573861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档