2013-06-13 19 views
9

Gömülü Scala ile oluşturulmuş bazı XML'lerim var, ancak oluşturulan XML'yi ayrı satırlara koymuyor.Scala'da biçimlendirilmiş XML oluşturma

Şu anda, böyle

<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> 

görünüyor ama ben böyle bakmak istiyorum:

<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> 

nasıl biçimlendirme kontrol edebilir? Bir PrettyPrinter

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

Olası yinelenen [Scala güzel biçimlendirilmiş XML üretmek için nasıl?] (Http://stackoverflow.com/questions/3364627/how-to-produce-nicely-formatted-xml -in-scala) – Suma

cevap

17

Kullanım:: Bu arada

val xml = // your XML 

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

printer.format(xml) 

, kendi toXML yerine düşünebilirsiniz İşte

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

toXML olan XML üretir koddur ile:

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

Bu, muhtemelen daha hızlıdır ve her türlü kaçış sorununu giderir. (Ne value.toString eğer </a> olarak değerlendirilirse?) Ait

+0

Teşekkürler! Çok iyi bilgi – tsjnsn

+0

"PrettyPrint", bir "String" yerine XML 'Node' olarak dönen bir alternatif var mı? Önce biçimlendirilmiş düğümü kullanmadan önce güzel yazıyı kullanmadan doğrudan baskı yapabilmek istiyorum. Şu anda, düğüm oluşturuyorum, güzel baskı ve sonra bir düğüm içine ayrıştırma 'XML.loadString (prettyPrinter format xml)' Çok verimli görünmüyor. – tsjnsn

+0

@tsjnsn Ne demek istediğini görüyorum. Görünüşe göre 'XML.loadString', önemli olmayan boşlukları koruyor. Bu, bir XML ayrıştırıcısının (bkz. Http://www.w3.org/TR/xml/#sec-white-space), belgenin kendisinde belirtilmedikçe (ve dolayısıyla gelecekte değişmeyeceği) bir davranış gerektirmez. “PrettyPrinter” 'i sadece bir String'e ihtiyacınız olduğunda kullanmanızı tavsiye ederim. – gzm0

İlgili konular