groovy findAll扩展<

时间:2014-08-27 01:11:33

标签: xml groovy

我有一个带有嵌入式HTML标记的XML文档,其中包含“&amp; lt”和“&amp; gt”(它由XMLSlurper.parseText()干净地解析)。当我使用Groovy的depthFirst.findAll()时,返回的列表会显示&lt&gt替换为<>。这使得随后搜索原始XML内容变得困难,因为返回的列表项不再与原始XML中的字符匹配。

XML片段:

<label>Read about it &lt;a href="http://whatever"&gt;here&lt;/a&gt;</label>

此代码:

def root = new XmlSlurper().parseText(xml)
def list = root.depthFirst().findAll{ it.name().equalsIgnoreCase('label') }

给我:

Read about it <a href="http://whatever">here</a>

有没有办法阻止&amp; lt /&amp; gt等序列被findAll等方法破坏?

1 个答案:

答案 0 :(得分:2)

看看this question - 它的类似问题。建议的解决方案也适用于您的情况:

def xml = '<label>Read about it &lt;a href="http://whatever"&gt;here&lt;/a&gt;</label>'

def root = new XmlSlurper().parseText(xml)
def list = root.depthFirst().findAll{ it.name().equalsIgnoreCase('label') }

String content = new groovy.xml.StreamingMarkupBuilder().bind {
  mkp.yield list[0].text()
}

assert content == 'Read about it &lt;a href="http://whatever"&gt;here&lt;/a&gt;'