我正在尝试使用XmlSlurper
GPath 分析 XML 树,该findAll
方法的行为让我感到困惑。
例如,假设您有以下 XML 树:
<html>
<body>
<ul>
<li class="odd"><span>Element 1</span></li>
<li class="even"><span>Element 2</span></li>
<li class="odd"><span>Element 3</span></li>
<li class="even"><span>Element 4</span></li>
<li class="odd"><span>Element 5</span></li>
</ul>
</body>
</html>
假设xml
已通过XmlSlurper
'sparse
方法之一初始化,则以下代码按预期执行:
// Prints:
// odd
// odd
// odd
xml.body.ul.li.findAll {it.@class == 'odd'}.@class.each {println it.text()}
另一方面:
// Doesn't print anything.
xml.body.ul.li.findAll {it.@class == 'odd'}.span.each {println it.text()}
我很难理解为什么我可以使用特殊@
属性(以及其他属性,例如**
),但不能使用“正常”属性。
我查看了 API 代码,更让我困惑的是该getProperty
实现(在 中找到GPathResult
)似乎支持我正在尝试做的事情。
我错过了什么?