Ho un file XML che vorrei mappare alcuni attributi di dentro con uno script. Ad esempio:Come modificare l'attributo su Scala XML Element
<a>
<b attr1 = "100" attr2 = "50"/>
</a>
sarebbe potuto attributi scalato di un fattore di due:
<a>
<b attr1 = "200" attr2 = "100"/>
</a>
Questa pagina ha un suggerimento per aggiunta attributi ma non riporta in dettaglio un modo per mappare un attributo corrente con una funzione (in questo modo farebbe che molto difficile): http://www.scalaclass.com/book/export/html/1
quello che è venuta in mente è quello di creare manualmente l'XML (non Scala) lista concatenata ... qualcosa di simile:
// a typical match case for running thru XML elements:
case Elem(prefix, e, attributes, scope, children @ _*) => {
var newAttribs = attributes
for(attr <- newAttribs) attr.key match {
case "attr1" => newAttribs = attribs.append(new UnprefixedAttribute("attr1", (attr.value.head.text.toFloat * 2.0f).toString, attr.next))
case "attr2" => newAttribs = attribs.append(new UnprefixedAttribute("attr2", (attr.value.head.text.toFloat * 2.0f).toString, attr.next))
case _ =>
}
Elem(prefix, e, newAttribs, scope, updateSubNode(children) : _*) // set new attribs and process the child elements
}
È orribile, prolisso e ri-ordina inutilmente gli attributi nell'output, il che è negativo per il mio progetto corrente a causa di un codice client errato. Esiste un modo scala-esque per fare questo?
Sono scioccato da quanto pessima sia la biblioteca in questo senso. –
Molte buone risposte qui. Vedi anche http://stackoverflow.com/a/23092226/35274 – Philippe