我有一个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>
我需要提取节点&#34;产品&#34;及其属性&#34; name&#34;。但是(&#34;产品&#34;的子节点)&#34;属性&#34;还有属性&#34; name&#34;。 我编写了如下代码:
val xml = XML.loadFile("product.xml")
val names = (Head \\ Company \\ prodcuts \\ product \\ "@name").map { _.text }
但是这会返回产品和属性的名称列表。 如何仅选择产品名称? 感谢
答案 0 :(得分:2)
你可以这样做:
( xml \\ "Product").map( n => n \@ "name").foreach(println)
使用双反斜杠\\
意味着您要选择所有序列元素及其所有子序列元素。
您可以使用单个反斜杠\
来仅选择序列元素。但只有当你有一个子元素而不是列表时,它才有效。
我的解决方案是迭代所有Product
元素并获取它的相关序列属性。