没有XML声明的GPathResult到String

时间:2016-08-12 12:22:22

标签: xml groovy gpath

我正在使用

GPathResult转换为String
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"?>

3 个答案:

答案 0 :(得分:8)

使用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 :(得分: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();
    }

}

答案 2 :(得分:0)

您可以使用 XmlNodePrinter 并传递自定义编写器,因此,代替打印输出,它将打印为字符串:

public static String convert(Node xml) {
    StringWriter stringWriter = new StringWriter()
    XmlNodePrinter nodePrinter = new XmlNodePrinter(new PrintWriter(stringWriter))
    nodePrinter.print(xml)
    return stringWriter.toString()
}