Scala Xml 解析:如何获取具有不包括子节点的属性的节点

Scala Xml Parsing: How to get Node with a attribute excluding subnode

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

我需要提取节点 "Product" 及其属性 "name"。但是("Product" 的子节点)"Property" 也有属性 "name"。 我写了一段代码如下:

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

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

但是这个 returns 产品名称列表和 属性 两者。 我如何 select 只有产品名称? 谢谢

你可以这样做:

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

使用双反斜杠 \ 意味着您想要 select 所有序列元素及其所有子序列。 您可以使用单个反斜杠 \ 来仅选择序列元素。但是只有当你有一个子元素而不是一个列表时它才有效。

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