0

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

我需要提取节点“产品”及其属性“名称”。但是(“产品”的子节点)“属性”也有属性“名称”。我写了一段代码如下:

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

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

但这会返回产品名称和属性的列表。如何只选择产品名称?谢谢

4

1 回答 1

2

你可以这样做:

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

使用双反斜杠\\意味着您要选择所有序列元素及其所有子序列。您可以使用单个反斜杠\仅选择序列元素。但它仅在您有一个子元素但没有列表时才有效。

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

于 2016-01-20T13:41:01.213 回答