Tôi có một đại diện Scala của một số XML (ví dụ: scala.xml.Elem
) và tôi muốn sử dụng nó với một số API Java XML chuẩn (cụ thể là SchemaFactory). Có vẻ như chuyển đổi số Elem
thành số javax.xml.transform.Source
là những gì tôi cần làm, nhưng tôi không chắc chắn. Tôi có thể thấy nhiều cách khác nhau để viết một cách hiệu quả số Elem
và đọc nó vào một cái gì đó tương thích với Java, nhưng tôi tự hỏi nếu có một cách tiếp cận thanh lịch hơn (và hy vọng hiệu quả hơn)?Làm cách nào để chuyển đổi scala.xml.Elem thành một cái gì đó tương thích với các API javax.xml?
đang 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)))
Cảm ơn bạn đã trả lời. Trong khi nó chắc chắn đẹp hơn theo cách này, nó vẫn viết Elem ra một String và đọc nó trở lại, mà tôi đã hy vọng để tránh. – overthink
Vì các lựa chọn thay thế không chính xác là ngập lụt, tôi sẽ chấp nhận câu trả lời này (tôi cũng bị mắc kẹt với cách tiếp cận này trong ứng dụng của mình). Cảm ơn. – overthink
Không sao cả. Tôi muốn tôi biết một câu trả lời tốt hơn, nhưng tôi không quá quen thuộc với Java. Tôi đang nhảy trở lại hệ sinh thái Java vì Scala. Ít nhất theo cách này, mã của bạn sẽ súc tích hơn. –