2017-04-25 2 views
0

Je voudrais ajouter le DOCTYPE suivant à mon email html avec groovy.Comment ajouter! DOCTYPE à mon html avec groovy

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

Mon groovycode commence comme ceci:

def responseDoc = job.addDocument("ECommerce_test.html"){out -> 
def xmlWriter = new OutputStreamWriter(out) 
MarkupBuilder html = new MarkupBuilder(xmlWriter) 

J'ai essayé d'utiliser le MarkupBuilderHelper, mais je n » whant la déclaration xml. C'est le code que j'ai utilisé avec MarkupBuilderHelper et il ne semble pas fonctionner sans la déclaration.

def helper = new groovy.xml.MarkupBuilderHelper(xml) 
helper.xmlDeclaration([version:'1.0', encoding:'UTF-8', standalone:'no']) 
helper.yieldUnescaped """<!DOCTYPE note SYSTEM "note.dtd">""" 

/Therese

+0

Juste préfixer cette chaîne sur le document final est hors de question? – cfrick

+0

Je ne comprends pas ce que vous voulez dire. Pardon. : - | – Therese

+0

Vous devriez être en mesure d'utiliser StreamingMarkupBuilder –

Répondre

0

Quelque chose comme ceci avec StreamingMarkupBuilder?

import groovy.xml.* 

def responseDoc = job.addDocument("ECommerce_test.html"){out -> 
    out << new StreamingMarkupBuilder().bind { 
     mkp.yieldUnescaped '<?xml version="1.0", encoding="UTF-8", standalone="no"?>\n' 
     mkp.yieldUnescaped '<!DOCTYPE note SYSTEM "note.dtd">\n' 
     html { 
      body { 
       h1('WOW!') 
      } 
     } 
    } 
} 

Un Alternaïve:

import groovy.xml.* 

job.addDocument("ECommerce_test.html"){out -> 
    new StringWriter().with { sw -> 
     new MarkupBuilder(sw).html { 
      body { 
       h1('WOW!') 
      } 
     } 
     out << '<!DOCTYPE note SYSTEM "note.dtd">\n' << sw.toString() 
    } 
} 
+0

Merci d'avoir pris le temps. Cela a fonctionné de la même manière qu'avec MarkupBuilderHelper. Je reçois l'en-tête xml et je voudrais juste avoir le DOCTYPE. – Therese

+0

@Therese se débarrasser de la 'mkp.yieldUnescaped ' \ N'' ligne? –

+0

J'ai essayé votre solution et cela fonctionne, mais tous les formats tels que la nouvelle ligne disparaissent. Le code HTML s'affiche dans une longue ligne de texte. Mais maman, je dois l'accepter. Vous en gagnez et vous en perdez? :-) Est-ce parce que vous utilisez la balise StreamingMarkupBuilder de MarkupBuilder? – Therese

0

Il ne ressemble comme un bug. yieldUnescaped fonctionne dans une fermeture (dans une balise) ou après une déclaration XML, mais pas pour générer une première instruction de niveau supérieur.

+0

Devrais-je simplement accepter que je ne peux pas faire ce que je veux? – Therese

+0

Je demanderais pourquoi voulez-vous avoir la déclaration xmlDeclaration? Ça ne peut pas faire de mal, n'est-ce pas? – JBaruch

+0

Je pensais que cela pourrait faire une différence lors de l'ouverture mejl dans différents clients. Mais je ne sais pas si c'est important. – Therese