我有这个非常简单的示例xml文件
<?xml version="1.0"?>
<root>
<Preferences>
<test attr="cookies"/>
<test attr="cookies"/>
</Preferences>
<Present>
<test2 attr="cake"/>
</Present>
</root>
我正在编写一个XML实用程序,其中一个限制是从用户那里获取xPath以与scala的XML库一起使用。但是,我遇到了解决这个问题的问题,我们将其作为一个参数并将其与我加载的xml文件结合起来。我正在使用扇贝库来接受命令行参数。这是我到目前为止所尝试的:
class CommandLineOptions(args: Array[String]) extends ScallopConf(args){
banner("XML Tool to Modify Attributes in an XML file")
val filename = opt[String]("filename", short = 'f', descr = "XML filename" , required = true)
val xPath = opt[String]("xpath", short = 'x', descr = "XML Xpath" , required = true)
}
def main (args: Array[String]) {
val opts = new CommandLineOptions(args)
val xml=XML.loadFile(opts.filename())
println(xml\opts.xPath())
println(xml + opts.xPath())
}
第一个打印行没有结果,第二个打印行导致它附加到所有xml的末尾。
调用此-x选项时,将"\\\Preferences"
作为跟踪scala x path语法并转义bash约束。
答案 0 :(得分:0)
我认为这并非易事,但其他人可能会采取相反的做法。由于Scala是基于Java构建的,因此请查看this solution that shows how you can pass a regular XPath string to a JDOM。
给定的解决方案提供了一种使Scala更友好的方法。