2

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

问候,斯特凡

4

1 回答 1

3

您必须定义一个命名空间并在 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前缀。

于 2014-02-12T14:40:16.087 回答