我有这个 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。
问候,
斯特凡
您必须定义一个命名空间并在 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
使用前缀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)