在Scala中从XML提取数据并转换为JSON

时间:2019-12-31 06:42:27

标签: json xml scala xpath

对于给定的XPath表达式,我正在尝试从XML文件提取数据并将其转换为JSON。
示例XML输入数据:

<CATALOG>
  <PLANT>
    <COMMON>Bloodroot</COMMON>
    <BOTANICAL NAME="Sanguinaria canadensis" LIGHT="Rare Shady"/>
    <PRICE>3.99</PRICE>
  </PLANT>
  <PLANT>
    <COMMON>Columbine</COMMON>
    <BOTANICAL NAME="Aquilegia canadensis" LIGHT="Shady" />
    <PRICE>5.99</PRICE>
  </PLANT>
</CATALOG>

这是我想出的代码。

import scala.xml.XML.loadFile
import org.json4s.Xml.toJson
import org.json4s.jackson.Serialization.write


val xmlData = loadFile(xmlFilePath)
val nodeSeq = xmlFile \\ "CATALOG" \\ "PLANT" \\ "COMMON"
val jsonData = toJson(nodeSeq)
val jsonString = write(json)

Output:
{"COMMON":["Bloodroot","Columbine"]}

我的问题是,我正在手动将XPath表达式转换为 scala.xml 库所需的格式。

我发现很少的库可以在给定通用XPath表达式的情况下提取数据,但是在将提取的数据转换为JSON输出(如上述格式)时遇到困难。

有没有可以接受通用XPath表达式从XML文件提取数据的scala库, 像上面那样转换为JSON格式很容易?

为您提供更多示例,

For the above input XML data,

1. XPath expression
/CATALOG/PLANT/COMMON[1]
output:
{"COMMON":"Bloodroot"}

2. XPath expression
/CATALOG/PLANT[PRICE<5.00]/COMMON
output:
{"COMMON":"Bloodroot"}

3. XPath expression
//BOTANICAL[@NAME="Sanguinaria canadensis"]
output:       
{"BOTANICAL" : {"NAME": "Sanguinaria canadensis", "LIGHT": "Rare Shady"}}

是否有现有的Scala库,已经做到了?如果没有,您将采取什么方法? (现在,我正在考虑使用正则表达式的解决方案,不要认为这是最佳选择) 感谢您的帮助

0 个答案:

没有答案