2016-08-12 2 views
4

Я преобразования GPathResult в String используяGPathResult в строку без объявления XML

def gPathResult = new XmlSlurper().parseText('<node/>') 
XmlUtil.serialize(gPathResult) 

Он отлично работает, но я получаю декларацию XML перед моим XML

<?xml version="1.0" encoding="UTF-8"?><node/> 

Как я могу конвертировать GPathResult в String без <?xml version="1.0" encoding="UTF-8"?> в начале?

ответ

6

Использование XmlParser вместо XmlSlurper:

def root = new XmlParser().parseText('<node/>') 
new XmlNodePrinter().print(root) 

Использование new XmlNodePrinter(preserveWhitespace: true) может быть вашим другом за то, что вы пытаетесь сделать также. См. Остальные параметры в документах: http://docs.groovy-lang.org/latest/html/gapi/groovy/util/XmlNodePrinter.html.

1

Это код в классе XmlUtil. Вы заметите, что это добавляет объявление xml, поэтому достаточно просто его скопировать и удалить:

private static String asString(GPathResult node) { 
    try { 
     Object builder = Class.forName("groovy.xml.StreamingMarkupBuilder").newInstance(); 
     InvokerHelper.setProperty(builder, "encoding", "UTF-8"); 
     Writable w = (Writable) InvokerHelper.invokeMethod(builder, "bindNode", node); 
     return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + w.toString(); 
    } catch (Exception e) { 
     return "Couldn't convert node to string because: " + e.getMessage(); 
    } 

}