Scala中的简单Xpath查询

Chi*_*rlo 5 xml xpath scala

我正在尝试使用Scala运行XPath查询,但它似乎不起作用。我的Xml看起来像(简化):

<application>
  <process type="output" size ="23"> 
     <channel offset="0"/>
      ....
     <channel offset="4"/>
  </process>
  <process type="input" size ="16"> 
     <channel offset="20"/>
      ....
     <channel offset="24"/>
  </process>
</application>
Run Code Online (Sandbox Code Playgroud)

我想process使用input属性来检索,为此,我使用以下XPath查询:

//process[@type='input']
Run Code Online (Sandbox Code Playgroud)

这应该可行,我用xpathtester验证了它, 现在,我的scala代码如下所示:

import scala.xml._
val x = XML.loadFile("file.xml")

val process = (x \\ "process[@type='input']")  // will return empty NodeSeq() !!!
Run Code Online (Sandbox Code Playgroud)

process补虚结束,但这并没有捕捉我想要什么。我像这样工作:

val process = (x \\ "process" filter( _ \"@type" contains Text("input")))
Run Code Online (Sandbox Code Playgroud)

这很丑。我的原始查询不起作用的任何已知原因?

Sau*_*tka 0

我相信 scala xml 实现无法处理如此复杂的 XPath 查询。然而,创建一个小的丰富包装来减少混乱并不困难,例如看看这个线程。使用建议的包装器,您可以像这样解决您的问题:

x \\ "process" \@ ("type", _ == "input")
Run Code Online (Sandbox Code Playgroud)

  • 看过那个,但由于该线程已有几年历史,我希望现在 scala 2.10 可能有更好的方法 (2认同)