Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量作为xpath-bash脚本(html)的标记_Bash_Xpath - Fatal编程技术网

变量作为xpath-bash脚本(html)的标记

变量作为xpath-bash脚本(html)的标记,bash,xpath,Bash,Xpath,我目前正在尝试使用xpath打印网页中的数据集。我在标记数组上循环时遇到问题,因为下面的示例生成空$element变量: declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]'); COUNTER=1 for tag in "${Elements[@]}"; do element="$(curl -s http://mypage | xmllint --html --x

我目前正在尝试使用xpath打印网页中的数据集。我在标记数组上循环时遇到问题,因为下面的示例生成空$element变量:

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done
declare-a Elements=('/*[@id=“page wrapper”]/div[1]'/*[@id=“page wrapper”]/div[2]');
计数器=1
对于“${Elements[@]}”中的标记;
做
element=“$(curl-shttp://mypage |xmllint--html--xpath'$tag'-2>text.txt | tr-d'a-z=“”/”)\
echo元素$COUNTER:$ELEMENT
设计数器=计数器+1
完成
如果我手动将“$tag”替换为xpath(.e.g),则具有以下内容:

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done
element="$(curl -s http://mypage | xmllint --html --xpath '//*[@id="page-wrapper"]/div[1]' - 2>text.txt | tr -d 'a-z<>=""/')" \
element=“$(curl-shttp://mypage |xmllint--html--xpath'/*[@id=“page wrapper”]/div[1]'-2>text.txt | tr-d'a-z=“”/”)\
一切都很好。你知道我做错了什么吗?我相信$tag周围的语法有问题,但我看不出我到底做错了什么。如果你能朝正确的方向轻推我,我将不胜感激!

更改行

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done
xmllint --html --xpath '$tag'

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done
这是经验法则,单引号不会在
bash
中展开变量,您需要对它们进行双引号。在变量名称周围使用单引号,会使
$
无法执行变量插值

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done
也是一本好书,

非常感谢:)很高兴知道这一点!
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done