我需要一个特定的“div'标签(通过标识‘ID’)从一个HTML网站。为了解析页面 我使用cyberneko。

    def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
    divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId  }

到目前为止,没有问题,但最后我不需要XML,但整个“DIV”标签的原创内容。不幸的是我无法弄清楚如何做到这一点...

有帮助吗?

解决方案

编辑:响应第一评论

这个作品:

def html = """
  <body>
        <div id="breadcrumbs">
            <b>
            crumb1
            </b>
        </div>
</body>
"""

def doc = new XmlSlurper(new org.cyberneko.html.parsers.SAXParser()).parseText(html)
divTag = doc.BODY.DIV.find { it.@id == 'breadcrumbs'  }
println "" << new groovy.xml.StreamingMarkupBuilder().bind {xml -> xml.mkp.yield divTag}

它看起来像cyberneko将返回一个良好形成的HTML文档,无论原始标记是否。即,DOC的根将是一个HTML元素,也将有磁头元件。整齐。

其他提示

这是一个简单的测试基于诺亚回答 - 不幸的是它没有(还)工作:(

    def html = """
      <body>
            <div id="breadcrumbs">
                <b>
                crumb1
                </b>
            </div>
    </body>
    """

    def doc = new XmlSlurper( new org.cyberneko.html.parsers.SAXParser() ).parseText(html)
    println "document: $doc"
    def htmlTag = doc.DIV.find {
        println "-> $it"
        it['@id'] == "breadcrumbs"
    }
    println htmlTag
    assert htmlTag
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top