Tengo una representación de Scala de algunos XML (es decir, un scala.xml.Elem
), y me gustaría utilizarlo con algunas de las API estándar XML de Java (específicamente SchemaFactory). Parece que la conversión de mi Elem
a un javax.xml.transform.Source
es lo que tengo que hacer, pero no estoy seguro. Puedo ver varias formas de escribir eficazmente mi Elem
y leerlo en algo compatible con Java, pero me pregunto si hay un enfoque más elegante (y con suerte más eficiente).¿Cómo puedo convertir scala.xml.Elem a algo compatible con las API javax.xml?
código 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)))
Gracias por la respuesta. Aunque definitivamente es más bonito mirar de esta manera, todavía está escribiendo el Elem en una cadena y leyéndolo de nuevo, lo cual esperaba evitar. – overthink
Dado que las alternativas no están exactamente inundadas, voy a aceptar esta respuesta (también me he quedado con este enfoque en mi aplicación). Gracias. – overthink
No hay problema. Ojalá supiera una mejor respuesta, pero no estoy muy familiarizado con Java. Estoy volviendo al ecosistema de Java debido a Scala. Al menos de esta manera tu código será más conciso. –