首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xidel:如何处理一个节点的多个结果?

Xidel:如何处理一个节点的多个结果?
EN

Stack Overflow用户
提问于 2020-06-16 05:24:36
回答 2查看 430关注 0票数 1

比如说,我们有一个密码:

代码语言:javascript
复制
xidel -s https://www.example.com -e '(//span[@class="number"])'

产出如下:

代码语言:javascript
复制
111111
222222
333333

我能在下面做这个吗?

代码语言:javascript
复制
for ((n=1;n<=3;n++))
do
   a=$(xidel -s https://www.example.com -e '(//span[@class="number"]) [$n]')
   b=$a+1
   echo $b
done

我希望它能打印出3个经过编辑的数字,像这样:

代码语言:javascript
复制
111112
222223
333334

下载3次网页可能有点荒谬,但这里的原因是使用ForLoop逐个处理输出的每个值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-16 22:31:05

xidel完全支持XPath/XQuery3.0(对XPathXQuery3.1的支持正在开发中),因此您可以使用它提供的所有特性和过滤器。

我可以推荐以下网站:

如果没有"Minimal, Reproducible Example“,我将把上面提到的输出放在一个序列中,并向您展示一些示例。

代码语言:javascript
复制
xidel -se 'let $a:=(111111,222222,333333) return $a ! (. + 1)'
#or
xidel -se 'for $x in (111111,222222,333333) return $x + 1'
111112
222223
333334
代码语言:javascript
复制
xidel -se 'let $a:=("a abc","a sdf","a wef","a vda","a gdr") return $a ! substring-after(.,"a ")'
#or
xidel -se 'let $a:=("a abc","a sdf","a wef","a vda","a gdr") return $a ! replace(.,"a ","")'
#or
xidel -se 'for $x in ("a abc","a sdf","a wef","a vda","a gdr") return substring-after($x,"a ")'
#or
xidel -se 'for $x in ("a abc","a sdf","a wef","a vda","a gdr") return replace($x,"a ","")'
abc
sdf
wef
vda
gdr
票数 1
EN

Stack Overflow用户

发布于 2020-06-16 07:13:30

示例代码:

代码语言:javascript
复制
$ aa=$(xidel -se '//span[@class="random"]' 'https://www.example.com')
$ echo $aa

让我们说,xidel的结果如下:

代码语言:javascript
复制
a abc
a sdf
a wef
a vda
a gdr

and...lets说,在这个例子中,我们希望从列表中的每个单词中删除所有的a,而不仅仅是排除a

我们可以使用这样的For Loop公式:

代码语言:javascript
复制
#"a " is the one we want to remove, so make variable for this prefix
a="a "

for ((n=-1;n>=-5;n--))
do
 #process the extraction by selecting which line first
   bb=$(echo "$aa" | head $n | tail -1)
 #then remove the prefix after that
   bb=${aa/#$a}
   echo $bb

done

这将打印:

代码语言:javascript
复制
abc
sdf
wef
vda
gdr

奖金

代码语言:javascript
复制
#"a " is the one we want to remove, so make variable for this prefix
a="a "

for ((n=-1;n>=-5;n--))
do
 #process the extraction by selecting which line first
   bb=$(echo "$aa" | head $n | tail -1)
 #then remove the prefix after that
   bb=${aa/#$a}
 #echo everything except 2nd line
 if [ $n != -2 ] ; then
 echo $bb
 fi

done

这将打印:

代码语言:javascript
复制
abc
wef
vda
gdr

欢迎任何其他意见。

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

https://stackoverflow.com/questions/62401465

复制
相关文章

相似问题

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