我通过类型安全的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}")
它什么也不返回。
请您给我一些解决的提示。
非常感谢!
答案 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")