Possiedo una rappresentazione Scala di un file XML (ad esempio un scala.xml.Elem
) e mi piacerebbe utilizzarlo con alcune delle API Java XML standard (in particolare SchemaFactory). Sembra che convertire il mio Elem
in un javax.xml.transform.Source
sia quello che devo fare, ma non ne sono sicuro. Riesco a vedere vari modi per scrivere in modo efficace il mio Elem
e leggerlo in qualcosa di compatibile con Java, ma mi chiedo se c'è un approccio più elegante (e si spera più efficiente)?Come posso convertire scala.xml.Elem in qualcosa di compatibile con le API javax.xml?
codice Scala:
import java.io.StringReader
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.{Schema, SchemaFactory}
import javax.xml.XMLConstants
val schemaXml = <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="foo"/>
</xsd:schema>
val schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// not possible, but what I want:
// val schema = schemaFactory.newSchema(schemaXml)
// what I'm actually doing at present (ugly)
val schema = schemaFactory.newSchema(new StreamSource(new StringReader(schemaXml.toString)))
Grazie per la risposta. Anche se è decisamente più bello in questo modo, sta ancora scrivendo la Elem out to a String e rileggendola, cosa che speravo di evitare. – overthink
Poiché le alternative non sono esattamente allagate, accetterò questa risposta (ho anche bloccato questo approccio nella mia app). Grazie. – overthink
Nessun problema. Vorrei sapere una risposta migliore, ma non ho molta familiarità con Java. Sto tornando all'ecosistema Java grazie a Scala. Almeno in questo modo il tuo codice sarà più conciso. –