سؤال

أحتاج إلى واحد "div'-tag (الذي تم تحديده بواسطة" 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