我有这个XML文件
<?xml version="1.0" encoding="utf-8"?>
<xObject version="3.0" xmlns="http://schemas.microsoft.com/random/2006/objects">
<section id="*" type="product">
<table name="XFile">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>This line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>This line here 2</field>
</row>
</table>
</section>
</xObject>
我想要做的是用xmlstarlet选择每个第4个元素。
我设法使用XmlPad这样做:// table [@ name ='XFile'] / row / field [4] / text(),但遗憾的是我必须使用xmlstarlet执行此操作。
另外,如果我删除了xObject的属性/命名空间,似乎可以使用以下命令:xml sel -t -v“// table / row / field [4] / text()”test.xml
有谁知道如何做到这一点?这是我第一次尝试评估xpath。
此致 斯蒂芬
答案 0 :(得分:2)
您必须定义命名空间并在XPath表达式中使用它:
$ xmlstarlet sel -N ns="http://schemas.microsoft.com/random/2006/objects" -t -v "//ns:table/ns:row/ns:field[4]/text()" test.xml
上面的命令使用-N ns="http://schemas.microsoft.com/random/2006/objects"
来声明名为ns
的名称空间,该名称空间设置为XML文件中默认名称空间的值。然后设置XPath表达式,以便使用此ns
前缀。