如何使用xmlstarlet选择元素下的所有属性?

时间:2016-06-08 19:41:24

标签: xml xml-parsing xmlstarlet

如何使用xmlstarlet从以下hrefs获取div

<div xmlns="http://www.w3.org/1999/xhtml" class="my_list">
<ul>
<li><a href="http://mylink1.html" title="title1">this is title 1</a></li>
<li><a href="http://mylink2.html" title="title2">this is title 2</a></li>
 ...
 </ul>
</div>

我在我的Mac上尝试了以下xmlstarlet sel -t -m "//*[@class='my_list']" -v "." myfile.xml,但没有成功。

1 个答案:

答案 0 :(得分:1)

您可以将//@href附加到XPath表达式,以获取已选择的节点下的所有@href个属性:

//*[@class='my_list']//@href

<强>解释

您的基础XPath可以选择感兴趣的div。它绕过了为http://www.w3.org/1999/xhtml声明名称空间的需要,方法是使用元素通配符*,然后为@class指定一个值,该值不受{{div上的默认名称空间声明的影响感兴趣的。

从那里,//沿着后代或自我轴选择 - /只会沿着直接子轴选择 - @href选择href要求的属性。