使用变量作为XPath表达式输出异常,求xidel正确用法及拼接优化
解决Xidel解析Reddit的两个问题
1. 变量简化后输出不一致的解决
原命令通过|合并两个节点集(所有href节点、所有h3文本节点)输出,分开用-se定义变量再用-e取节点可能因参数作用域导致输出异常。正确的做法是将变量定义与输出表达式放在同一个-e参数中:
xidel -e 'xp:=//div[@data-click-id="background"]/div[@data-adclicklocation="title"]/div/a[@data-click-id="body"]; $xp/@href|$xp/div/h3/text()' "https://www.reddit.com/r/bash"
2. 实现"url <描述>"的格式输出
你之前尝试的拼接方法错误在于针对所有href和文本整体处理,而非每个a标签单独拼接对应href与文本。正确写法如下:
直接写法
xidel -e '//div[@data-click-id="background"]/div[@data-adclicklocation="title"]/div/a[@data-click-id="body"]/concat(@href, " ", div/h3/text())' "https://www.reddit.com/r/bash"
变量简化写法
xidel -e 'xp:=//div[@data-click-id="background"]/div[@data-adclicklocation="title"]/div/a[@data-click-id="body"]; $xp/concat(@href, " ", div/h3/text())' "https://www.reddit.com/r/bash"
如果需要处理h3标签内多文本节点的情况,可改用string-join:
xidel -e 'xp:=//div[@data-click-id="background"]/div[@data-adclicklocation="title"]/div/a[@data-click-id="body"]; $xp/string-join((@href, div/h3/text()), " ")' "https://www.reddit.com/r/bash"
内容的提问来源于stack exchange,提问作者Gilles Quénot
相关产品推荐
相关产品推荐

