2016-01-20 106 views
0

我有一個XML如下:Scala的XML解析:如何獲得節點與屬性不包括子節點

<Head> 
    <Company> 
    <Props> 

    </Props> 
    <Config> 

    </Config> 
     <Products> 
      <Product type="Random" name="xyz"> 
       <Property name="asd" value="asd"/> 
      </Product> 
      <Product type="Random1" name="xyz1"> 
       <Property name="asd1" value="asd1"/> 
      </Product> 
      <Product type="Random2" name="xyz"> 
       <Property name="asd2" value="asd2"/> 
      </Product> 
     </Products> 
    </Company> 
</Head> 

我需要提取節點「產品」,其「name」屬性。但是(「產品」的子節點)「屬性」也有屬性「名稱」。 我寫了代碼如下:

val xml = XML.loadFile("product.xml") 

val names = (Head \\ Company \\ prodcuts \\ product \\ "@name").map { _.text } 

但是,這兩種產品的返回和財產的名稱的列表。 我如何只選擇產品名稱? 感謝

回答

2

你可以水木清華這樣的:

(xml \\ "Product").map(n => n \@ "name").foreach(println) 

使用雙反斜線\\意味着你要選擇所有序列的元素和它所有子的。 您可以使用單個反斜槓\僅選擇序列元素。但它只適用於你有一個子元素而不是列表。

我的解決方案是遍歷所有Product元素並獲取它的相關序列屬性。