简体   繁体   中英

How to disable pretty-printing in Groovy MarkupBuilder?

I have a string input in my Mule flow. It passes through my Groovy Script and outputs XML. I originaly had the script followed by an XSLT converter to remove empty nodes and set the indent to "no" in the output tag. But now I removed it as I cannot use it in conjunction with my script if I want to keep the special characters (see previous question here ).

Instead I now check each value before printing the nodes. But the problem I have is my XML needs to be unindented in order to work with my InDesign project I adapt the XML for. I lost that ability when I removed the XSLT so I fixed one problem but created another.

I found the method getPrinter(), I used it with the setAutoIndent(false) but it didn't change anything to the output and created no errors. Not to sure where to use it.

Here's my script :

public Boolean isEmpty(value){
    if(value.toString().trim() == "" || value.toString().trim() == '' || value == null)
        return true;
}

root = new XmlSlurper(false,false).parseText(payload)

if(root.name() == 'GetActivitiesResponse')
    startEach = root.children().children()
else
    startEach = root.children()

def xml = new StringWriter().with { w -> new groovy.xml.MarkupBuilder(w).with {
        mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")
                 escapeAttributes = false  
                 getPrinter().setAutoIndent(false);  
                 "w_import_saisie_web"() {
                    startEach.each { p -> "w_evenement"() {
                        if(!isEmpty(p.PresentationDate))
                            "w_dates"{ mkp.yieldUnescaped (p.PresentationDate.toString() + "
")  }
                        if(!isEmpty(p.SubTitle))                                
                            "w_contexte"{ mkp.yieldUnescaped (p.SubTitle.toString() + "
") }
                        //if(!isEmpty(p.SubTitle)) 
                            "w_nom_evenement"{ /*p.GEVT_Type*/ mkp.yieldUnescaped ("Nom evenement" + "
") }
                        if(!isEmpty(p.Name)) 
                            "w_titre"{ mkp.yieldUnescaped (p.Name.toString() + "
")}
                        if(!isEmpty(p.ShortDescription) || !isEmpty(p.Teaser))      
                            "w_texte"{mkp.yieldUnescaped (p.ShortDescription.toString() +  p.Teaser.toString() + "
")}

                             p.SubEvents.children().each { q -> "w_bloc_sous_evenement"() {
                                if(!isEmpty(q.PresentationDate) || !isEmpty(q.Name)) 
                                    "w_sous_eve_titre"{ mkp.yieldUnescaped (q.PresentationDate.toString() + q.Name.toString() + "
")}
                                if(!isEmpty(q.ShortDescription) || !isEmpty(q.Teaser) || !isEmpty(q.WebDescription))  
                                    "w_sous_eve_desc"{mkp.yieldUnescaped (q.ShortDescription.toString() + q.Teaser.toString() + q.WebDescription.toString() + "
")}
                                }
                             }   
                             if(!isEmpty(p.Site) || !isEmpty(p.PresentationHours))
                                "w_coordonnees"{ mkp.yieldUnescaped ("teeeessdfsdfsdfst" +  p.Site.toString() + ' - ' + p.PresentationHours.toString() + "
")}                
                        }
                    }
                }
    }
    w.toString()
}

Add an IndentPrinter when you create the MarkupBuilder.

def xml = new MarkupBuilder(new IndentPrinter(new PrintWriter(writer), "", true))

See this question: groovy.xml.MarkupBuilder disable PrettyPrint

I tried a bunch of different things to see if setAutoIndent was effective (setting it before passing the IndentPrinter to the MarkupBuilder for example) and it didn't seem to have any effect. So, like you, I'm wondering about its purpose.

意识到我太费劲了...只是在末尾的toString()中添加了这条简单的线...

w.toString().replaceAll(">\\s+<", "><").trim();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM