2014-02-12 58 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

作爲一種魅力,非常感謝你!我花了數小時試圖解決這個問題...... –