XMLStarlet - 如何使用双名称空间选择元素数据

时间:2014-09-24 22:06:04

标签: xml-parsing xmlstarlet

我尝试使用XMLStarlet选择元素数据,但我无法这样做......

我能够选择属性但不能选择元素,而且我不确定我做错了什么:

sample.xml

<Response xmlns:r="http://test1" xmlns:c="http://test2" 
    <r:UniqueIDList>
      <c:UniqueID type="INTERNAL">123456789</c:UniqueID>
      <c:UniqueID type="INTERNAL" source="ID">987654321</c:UniqueID>
    </r:UniqueIDList>

代码i用于提取

 xml sel -N c="http://test2" -N r="http://test1" -t -m "//r:UniqueIDList/c:*" -v @type -n sample.xml

我将收到INTERNAL INTERNAL,但无法弄清楚如何选择实际的UniqueID

预期产量:     123456789     987654321

理想情况下,我只希望看到第一个......

非常感谢任何帮助。

经过进一步测试后,我设法实现这一目标......

   xml sel -N c="http://test2" -N r="http://test1" -t -v "//r:UniqueIDList/c:UniqueID sample.xml

工作正常。

您能否建议是否可以提取第一个值?

1 个答案:

答案 0 :(得分:2)

所以我设法弄明白了......

不确定这是否正确,但可以使用以下方法实现:

 xml sel -N c="http://test2" -N r="http://test1" -t -v "//r:UniqueIDList/c:UniqueID[position()=1]" sample.xml