Scala的XML解析:如何获得节点与属性不包括子节点

问题描述:

我有一个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 } 

但是,这两种产品的返回和财产的名称的列表。 我如何只选择产品名称? 感谢

你可以水木清华这样的:

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

使用双反斜线\\意味着你要选择所有序列的元素和它所有子的。 您可以使用单个反斜杠\仅选择序列元素。但它只适用于你有一个子元素而不是列表。

我的解决方案是遍历所有Product元素并获取它的相关序列属性。