我使用以下命令从XML文件中提取URL:
xmllint --xpath '//ROOT/ITEM/PHOTO/text()' xml_2015-05-13-20\:39.xml
它有效,但输出是URL的大量文本:
http://1.jpghttp://2.jpghttp://3.jpghttp://4.jpghttp://5.jpghttp://6.jpg
每次比赛结束后可以添加\n
换行符吗?
XML:
<ROOT>
<ITEM>
<PHOTO>http://1.jpg</PHOTO>
</ITEM>
<ITEM>
<PHOTO>http://2.jpg</PHOTO>
</ITEM>
</ROOT>
这是一个可能的方法来做白色xidel:
xidel -e "//ROOT/ITEM/PHOTO/text()" -q ./my.xml > ./processed_xml
获取XMLStarlet并尝试
xmlstarlet sel -t -m "/ROOT/ITEM/PHOTO" -v . -n xml_2015-05-13-20\:39.xml
| | | | |
| | | | -n ... add new-line after printed element
| | | -v . print the value of the matched node
| | -m match this Xpath
| -t (select) using a template (the -m part)
sel(ect)
xmlstarlet专为命令行处理和脚本解决方案而设计,而xmllint不会将此类用途列为最高优先级。
正如其他人已经说过的那样,xmllint
本身是不可能的。
但是在sed
这样的工具的帮助下,你可以实现你想要的:
$ xmllint --xpath "//ROOT/ITEM/PHOTO" xml_2015-05-13-20\:39.xml | sed "s/<\/PHOTO>/<\/PHOTO>\n/g"
<PHOTO>http://1.jpg</PHOTO>
<PHOTO>http://2.jpg</PHOTO>
现在要删除标签,需要一个额外的表达式:
$ xmllint --xpath "//ROOT/ITEM/PHOTO" xml_2015-05-13-20\:39.xml | sed "s/<\/PHOTO>/<\/PHOTO>\n/g ; s/<[^>]\+>//g"
http://1.jpg
http://2.jpg