xmlstarlet:按位置编号选择元素

时间:2014-02-12 13:32:58

标签: xml xpath xmlstarlet

我有这个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。

此致 斯蒂芬

1 个答案:

答案 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前缀。