我正在尝试使用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)
这很丑。我的原始查询不起作用的任何已知原因?
我相信 scala xml 实现无法处理如此复杂的 XPath 查询。然而,创建一个小的丰富包装来减少混乱并不困难,例如看看这个线程。使用建议的包装器,您可以像这样解决您的问题:
x \\ "process" \@ ("type", _ == "input")
Run Code Online (Sandbox Code Playgroud)