xml - scala 中的简单 Xpath 查询

标签 xml scala xpath

我正在尝试使用 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>

我想使用 input 属性检索 process,为此我使用了这个 XPath 查询:

//process[@type='input']

这应该有效,我用 xpathtester 验证了它 现在,我的 Scala 代码如下所示:

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

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

process 最终为空,它没有捕获我想要的内容。我是这样解决的:

val process = (x \\ "process" filter( _ \"@type" contains Text("input")))

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

最佳答案

不应使用“XPath”来描述 Scala 标准库支持的内容。 XPath 是一种成熟的表达式语言,目前有两个最终版本和第三个版本:

充其量您可以说 Scala 具有非常小的受 XPath 启发的操作子集。因此,您不能期望在不做更多工作的情况下直接将 XPath 表达式粘贴到 Scala。

第三方库可以为实际的 XPath 表达式提供更好的支持,包括:

  • Scales Xml
    • Scala 库
    • “提供了比普通 Scala XML 更像 XPath 的体验,路径看起来像 XPath 并且也像它们一样工作(具有许多相同的功能和轴)”
    • 如果我理解得很好,它仍然不是真正的 XPath
    • 旨在与 Scala 良好集成
  • Saxon
    • Java 库
    • 开源
    • 对 XPath 2(和 XSLT 2)的完整且一致的支持
    • 有一个适用于 DOM 和其他数据模型的 XPath API,但目前没有特定的 Scala 支持

关于xml - scala 中的简单 Xpath 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743252/

相关文章:

java - GHA 中的单元测试因 java.lang.IllegalArgumentException : Unsupported class file major version 55 失败

java - 安装后尝试打开spark并收到错误: Unable to find any JVMs matching version "1.8"

xml - clojure 从 xsd 生成 xml 和 xpath

xml - as3 xml 检查元素是否存在

python - 为什么 BeautifulSoup 无法正确读取/解析此 RSS (XML) 文档?

scala - 无法使用akka java api的UnTypedActorFactory创建 Actor

java - 使用Selenium等待进度条

xml - 如何在xslt中提取这种格式

java - XML 与 JSON。哪个更适合存储小块数据?

android - 导航 View 的 itemTextColor 的颜色选择器