从XHTML文档中使用grails中的JSOUP获取两个不同标记之间的文本

从XHTML文档中使用grails中的JSOUP获取两个不同标记之间的文本,html,grails,tags,xhtml,jsoup,Html,Grails,Tags,Xhtml,Jsoup,我试图在我的xhtml文档中获取标记的所有文本。此标记在整个文档中出现1000次。我正在尝试创建与此标记关联的文本列表。我正在使用JSOUP和grails。到目前为止,代码已经编写完毕 Document doc = Jsoup.parse(file,"UTF-8") Elements pres = doc.getElementsByTag("ae_definedTermTitleBegin"); println pres //This prints a list which contains t

我试图在我的xhtml文档中获取标记的所有文本。此标记在整个文档中出现1000次。我正在尝试创建与此标记关联的文本列表。我正在使用JSOUP和grails。到目前为止,代码已经编写完毕

Document doc = Jsoup.parse(file,"UTF-8")
Elements pres = doc.getElementsByTag("ae_definedTermTitleBegin");
println pres //This prints a list which contains the tag itself fr eg. [<ae_definedtermtitlebegin/>,<ae_definedtermtitlebegin/>,<ae_definedtermtitlebegin/>....]
for (Element pre : pres) {
    println pre.text() //prints nothing. I assumed this would print the text within the tag
}           
Document doc=Jsoup.parse(文件“UTF-8”)
Elements pres=doc.getElementsByTag(“ae_definedtermttitlebegin”);
println pres//打印一个包含标签本身的列表,例如[,…]
用于(元件前置:前置){
println pre.text()//不打印任何内容。我认为这会打印标记中的文本
}           
谢谢你的帮助。非常感谢。 在xhtml文档中,文本如下所示

<ae_definedTermTitleBegin />Applicable Permitted Investment
Amount<ae_definedTermTitleEnd />
适用的允许投资
数量
我意识到我的内容在两个不同的标签之间。如何获取这两个标记之间的文本?

导入java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;

public class Main {

    public static void main(String[] args) throws Exception {
    /*  String html =   "<ae_definedTermTitleBegin />" +
                            "Applicable Permitted Investment Amount" +
                        "<ae_definedTermTitleEnd />";
    */
        String html = "<ae_definedTermTitleBegin />" +
                        "Applicable Permitted Investment Amount" +
                        "<ae_definedTermTitleBegin />" +
                            "Inner example" +
                        "<ae_definedTermTitleEnd />" +
                        "This is harder" +
                       "<ae_definedTermTitleEnd />";

        Document doc = Jsoup.parse(html);
        List<TextNode> lines = getTextBetweenTags(doc.getElementsByTag("body").get(0).childNodes(), 
                                                    "ae_definedTermTitleBegin", "ae_definedTermTitleEnd");

        System.out.println(lines);
    }

    private static List<TextNode> getTextBetweenTags(List<Node> listOfNodes, String tagStart, String tagEnd) {

        List<TextNode> lines = new ArrayList<>();

        int inRangeCounter = 0;
        for(Node node : listOfNodes) {
            if(node.nodeName().equalsIgnoreCase(tagStart)) {
                inRangeCounter++;
            } else if(node.nodeName().equalsIgnoreCase(tagEnd)) {
                inRangeCounter--;
            } else if(inRangeCounter > 0 && node instanceof TextNode) {
                lines.add((TextNode)node);
            }
        }

        return lines;
    }
}
导入java.util.List; 导入org.jsoup.jsoup; 导入org.jsoup.nodes.Document; 导入org.jsoup.nodes.Node; 导入org.jsoup.nodes.TextNode; 公共班机{ 公共静态void main(字符串[]args)引发异常{ /*字符串html=“”+ “适用的允许投资金额”+ ""; */ 字符串html=“”+ “适用的允许投资金额”+ "" + “内部示例”+ "" + “这更难”+ ""; Document doc=Jsoup.parse(html); 列表行=getTextBetweenTags(doc.getElementsByTag(“body”).get(0.childNodes(), “定义术语标题开始”、“定义术语标题结束”); 系统输出打印项次(行); } 私有静态列表getTextBetweenTags(节点列表、字符串标记开始、字符串标记结束){ 列表行=新的ArrayList(); int inRangeCounter=0; 用于(节点:listOfNodes){ if(node.nodeName().equalsIgnoreCase(tagStart)){ inRangeCounter++; }else if(node.nodeName().equalsIgnoreCase(tagEnd)){ 在量程计数器--; }else if(inRangeCounter>0&&TextNode的节点实例){ 添加((TextNode)节点); } } 回流线; } }
我遇到了使用SAX解析器的其他解决方案。谢谢你的帮助:)