如何在Groovy中使用XMLSlurper获取html标记文本

如何在Groovy中使用XMLSlurper获取html标记文本,html,groovy,xmlslurper,Html,Groovy,Xmlslurper,我试图在Groovy中修改html代码。我使用XMLSlurper解析了它。问题是我需要编辑包含文本和子标记的特定标记的文本。Html代码如下所示: <ul><li>Text to modify<span>more text</span></li></ul> 问题是我在“elements”中得到了空数组,因为it.text()返回来自“it”节点的文本以及整个DOM子树文本节点。在本例中为“文本到修改更多文本”。请注意,c

我试图在Groovy中修改html代码。我使用XMLSlurper解析了它。问题是我需要编辑包含文本和子标记的特定标记的文本。Html代码如下所示:

<ul><li>Text to modify<span>more text</span></li></ul>
问题是我在“elements”中得到了空数组,因为it.text()返回来自“it”节点的文本以及整个DOM子树文本节点。在本例中为“文本到修改更多文本”。请注意,contains()方法对于我的解决方案是不够的

我的问题是如何从某个标记而不是整个DOM子树中获取精确的文本?

.text()计算子元素和附录。因此,它将始终包括合并行

你能考虑localText()吗?它返回的字符串数组与您期望的不完全相同

import org.testng.Assert

ul='''<ul>
          <li>Text to modify<span>more text</span>
          </li>
       </ul> '''

def ulDOM = new XmlSlurper().parseText(ul);


def elements = ulDOM.li.findAll{
    String[] text = it.localText();
    text[0].equals("Text to modify");
}
Assert.assertTrue(elements.size()==1)
import org.testng.Assert
ul='''
  • 要修改的文本更多文本
“” def ulDOM=new XmlSlurper().parseText(ul); def元素=ulDOM.li.findAll{ String[]text=it.localText(); 文本[0]。等于(“要修改的文本”); } Assert.assertTrue(elements.size()==1)
对我来说,这有点不清楚。提供SSCCE。感谢您理解“Jayan”,我不知道如何更简单地解释我的问题…谢谢。方法localText()正是我要寻找的。问题是为什么我在文档中找不到它?无论如何,我已经为html解析更改了库。我用了JSoup,用了5分钟。。。所以我推荐给那些在groovy中对html进行修改的人。如果有人要求简单的html操作,第一个建议总是jsoup。我想我的编辑让事情变得更糟了。我删除了该标记,认为这是简单的xml编辑。
import org.testng.Assert

ul='''<ul>
          <li>Text to modify<span>more text</span>
          </li>
       </ul> '''

def ulDOM = new XmlSlurper().parseText(ul);


def elements = ulDOM.li.findAll{
    String[] text = it.localText();
    text[0].equals("Text to modify");
}
Assert.assertTrue(elements.size()==1)