使用xmllint从XML节点获取URL,添加新行

时间:2015-05-13 20:59:20

标签: linux bash xmllint

我使用以下命令从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>

3 个答案:

答案 0 :(得分:3)

这是一种可能的方法来做白色xidel:

$('.question .ui-state-default a').on("click", function(e) {
  $(this).closest('.question').addClass('active').siblings('.question.active').removeClass('active')
});

答案 1 :(得分:3)

获取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专为cmd-line处理和脚本解决方案而设计,其中xmllint未将此类用途列为最高优先级。

答案 2 :(得分:1)

像其他人已经指出的那样,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