2014-02-12 30 views
1

我有这样的XML文件xmlstarlet:通过它选择元素的位置数

<?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来做到这一点。

另外,如果我删除X对象的属性/命名空间,似乎使用命令工作:XML SEL -t -v “//表/行/场[4] /文()” 的test.xml

有没有人有任何想法如何做到这一点?这是我第一次尝试评估xpath。

问候, 斯特凡

+0

你忘了提及你目前正在做什么(确切的命令行?)和你得到什么错误。 – Tomalak

回答

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

+0

作为一种魅力,非常感谢你!我花了数小时试图解决这个问题...... –