将字符串xpath转换为XML

时间:2018-08-03 14:41:34

标签: xml scala typesafe

我通过类型安全的ConfigFactory加载了以下字符串。

Conf.conf:

xpath {
    test = """"region"/"city"/"street"/"apartment""""
}

然后我将其转换为合适的格式(反斜杠为正斜杠“区域” \“城市” \“街道” \“公寓”):

val conf = ConfigFactory.load("Conf.conf").getString("xpath.test")
val test = conf.replace("/","\\")

我有XML文件:

val xml_file = XML.load("PATHtoXML")

,以便进一步在“ xml_file”中找到“ test”的值。通常,它的工作方式类似于:(xml_file \“ xx” \“ yyy” \“ dddd”)。text。 但是我坚持以自己的方式获取价值:

val res = (xml_file \\ test).text
println(s"Result -> ${res}")

它什么也不返回。

请您给我一些解决的提示。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果不符合您的要求,则可以使用standard Java library to parse your XML file。在我看来,它比Scala XML更灵活,因为据我所知,对于后者,您不能轻易将XPath表达式用作String。您可以使用\\\运算符进行迭代,例如:

val res: String = (xml \\ "region" \ "city" \ "street" \ "apartment").text

使用Java库,您可以执行以下操作(基于上面我提供的SO帖子的可接受答案的示例):

import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.xpath.XPathFactory

val factory = DocumentBuilderFactory.newInstance
val builder = factory.newDocumentBuilder
val doc = builder.parse("PATHtoXML")

val xPathfactory = XPathFactory.newInstance
val xpath = xPathfactory.newXPath
val conf = "region/city/street/apartment"
val expr = xpath.compile(conf)

val res = expr.evaluate(doc)
println(s"Result -> ${res}")

您也可以像这样定义Conf.conf

xpath {
    test = "region/city/street/apartment"
}

并通过将上面的conf替换为来使用它:

val conf = ConfigFactory.load("Conf.conf").getString("xpath.test")