2013-06-13 11 views
9

Ich habe etwas XML mit eingebettetem Scala generiert, aber es legt das generierte XML nicht in separate Zeilen.Erzeugen von formatiertem XML in Scala

Derzeit sieht es so aus,

<book id="0"> 
     <author>Gambardella, Matthew</author><publish_date>Sun Oct 01 00:00:00 EDT 2000</publish_date><description>An in-depth loo 
k at creating applications with XML.</description><price>44.95</price><genre>Computer</genre><title>XML Developer's Guide</title> 
    </book> 

aber ich will es so aussehen:

<book id="0"> 
    <author>Gambardella, Matthew</author> 
    <publish_date>Sun Oct 01 00:00:00 EDT 2000</publish_date> 
    <description>An in-depth look at creating applications with XML.</description> 
    <price>44.95</price> 
    <genre>Computer</genre> 
    <title>XML Developer's Guide</title> 
</book> 

Wie kann ich die Formatierung steuern? Hier ist der Code, der die XML-

<book id="0"> 
    { keys map (_.toXML) } 
</book> 

hier erzeugt ist ToXml:

def toXML:Node = XML.loadString(String.format("<%s>%s</%s>", tag, value.toString, tag)) 
+0

Mögliche Duplikate von [Wie schön formatiert XML in Scala?] (Http://stackoverflow.com/questions/3364627/how-to-produce-nicely-formatted-xml -in-scala) – Suma

Antwort

17

Verwenden Sie ein PrettyPrinter:

val xml = // your XML 

// max width: 80 chars 
// indent:  2 spaces 
val printer = new scala.xml.PrettyPrinter(80, 2) 

printer.format(xml) 

By the way, Sie könnten Ihre toXML berücksichtigen wollen ersetzen mit:

def toXML: Node = Elem(null, tag, Null, TopScope, Text(value.toString)) 

Dies ist wahrscheinlich schneller und entfernt alle Arten von Problemen. (Was ist, wenn value.toString zu </a> auswertet?)

+0

Danke! Viele gute Informationen – tsjnsn

+0

Gibt es eine Alternative zu 'PrettyPrint', die als XML' Node' und nicht als 'String' zurückgegeben wird? Ich möchte den formatierten Knoten direkt drucken können, ohne zuerst den Prettyprinter zu verwenden. Im Moment baue ich den Knoten, ziemlich Drucken, und dann wieder in einen Knoten "XML.loadString (Prettyprinter Format Xml)" Parsing 'Scheint nicht sehr effizient. – tsjnsn

+0

@tsjnsn Ich sehe was du meinst. Anscheinend behält 'XML.loadString' nicht signifikante Leerzeichen bei. Dies ist kein erforderliches Verhalten für einen XML-Parser (siehe http://www.w3.org/TR/xml/#sec-white-space), es sei denn, es ist im Dokument selbst angegeben (und kann sich daher in Zukunft ändern). Ich empfehle Ihnen, den 'PrettyPrinter' nur dann zu verwenden, wenn Sie tatsächlich eine' String' benötigen. – gzm0

Verwandte Themen