簡體   English   中英

從HTML輸出Groovy pretty print XmlSlurper?

[英]Groovy pretty print XmlSlurper output from HTML?

我使用幾個不同的版本來執行此操作但似乎都導致此錯誤:

[致命錯誤]:1:171:前綴“xmlns”無法明確綁定到任何名稱空間; “xmlns”的命名空間也不能明確地綁定到任何前綴。

我加載html為:

// Load html file
def fis=new FileInputStream("2.html")
def html=new XmlSlurper(new  org.cyberneko.html.parsers.SAXParser()).parseText(fis.text)        

我試過的版本:

http://johnrellis.blogspot.com/2009/08/hmmm_04.html

import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
def streamingMarkupBuilder=new StreamingMarkupBuilder()
println XmlUtil.serialize(streamingMarkupBuilder.bind{mkp.yield html})

http://old.nabble.com/How-to-print-XmlSlurper%27s-NodeChild-with-indentation--td16857110.html

// Output
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
import groovy.util.XmlNodePrinter
import groovy.util.slurpersupport.NodeChild

def printNode(NodeChild node) {
    def writer = new StringWriter()
    writer << new StreamingMarkupBuilder().bind {
      mkp.declareNamespace('':node[0].namespaceURI())
      mkp.yield node
    }
    new XmlNodePrinter().print(new XmlParser().parseText(writer.toString()))
}

有什么建議?

謝謝! 米莎

問題是名稱空間。 這是解決方案:

def saxParser=new org.cyberneko.html.parsers.SAXParser()
saxParser.setFeature('http://xml.org/sax/features/namespaces',false)
new XmlSlurper(saxParser).parseText(text)    

import groovy.xml.XmlUtil
println XmlUtil.serialize(new StreamingMarkupBuilder().bind {
                mkp.yield page
              })

謝謝! 米莎

仍然沒有答案,但如果我使用XmlParser

def html=new XmlSlurper(new org.cyberneko.html.parsers.SAXParser()).parseText(somehtml)        
new XmlNodePrinter(preserveWhitespace:true).print(html)

將打印漂亮。

此外,如果您獲得StreamingMarkupBuilder,您可以:

import groovy.xml.XmlUtil
println XmlUtil.serialize(new StreamingMarkupBuilder().bind {
    ... make your markup here ...
}
) 

米莎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM