我想获取name的值并使用XMLLint将其放入变量中
<body>
<value name="abc"></value>
</body>
echo 'cat //body/value/@name' | xmllint --shell "test.xml"
/ > -------
name="abc"
/ >
Run Code Online (Sandbox Code Playgroud)
所以我想将值"abc"赋给变量$ test
小智 30
您需要使用fn:string(),它将返回其参数的值xs:string.如果它的参数是一个属性,它将返回属性的值为xs:string.
test=$(xmllint --xpath "string(//body/value/@name)" test.xml)
Run Code Online (Sandbox Code Playgroud)
小智 8
试试这个,它不漂亮,但它的工作:)
我只是删除包含>stdout的行,剪切字符串以获取第二部分之后=,并删除"
test=$(echo 'cat //body/value/@name' | xmllint --shell "test.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \");
echo $test
Run Code Online (Sandbox Code Playgroud)
具有支持多个属性的helper awk命令的方法(ego方法的简化版本):
echo 'cat //*/@name' | xmllint --shell file | awk -F\" 'NR % 2 == 0 { print $2 }'
Run Code Online (Sandbox Code Playgroud)
该awk命令:
xmllint通过"char 将的输出行拆分为字段。(-F\")
xmllint属性"...",也可以将属性值周围的引号归一化到输出上'...',因此只要除以即可"。仅处理偶数行(NR %2 == 0),从而滤除cat始终打印的分隔线。
print $2然后仅输出第二个字段,即每个属性的值,不带"..."。
假定以下示例XML file:
<body>
<value name="abc"></value>
<value name="def"></value>
</body>
Run Code Online (Sandbox Code Playgroud)
以上收益:
abc
def
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45728 次 |
| 最近记录: |