2010-01-04 8 views
9

Para usar una biblioteca de terceros, necesito un documento DOM w3c. Sin embargo, crear los nodos xml es más fácil en Scala. Así que estoy buscando una forma de convertir un elemento scala xml a w3c dom. Obviamente, puedo serializar una cadena y analizarla, pero estoy buscando algo más eficiente.¿Alguna conversión de XML de scala a DOM de w3c?

Respuesta

6

Aquí hay una versión simple (sin espacios de nombres) sobre la que puede compilar. Deberías dar la idea Simplemente reemplace las llamadas doc.createFoo (...) con sus equivalentes doc.createFooNS (...). Además, podría necesitar un manejo más inteligente de los atributos. Pero, esto debería funcionar para tareas simples.

object ScalaDom { 
    import scala.xml._ 
    import org.w3c.dom.{Document => JDocument, Node => JNode} 
    import javax.xml.parsers.DocumentBuilderFactory 

    def dom(n: Node): JDocument = { 

    val doc = DocumentBuilderFactory 
       .newInstance 
       .newDocumentBuilder 
       .getDOMImplementation 
       .createDocument(null, null, null) 

    def build(node: Node, parent: JNode): Unit = { 
     val jnode: JNode = node match { 
     case e: Elem => { 
      val jn = doc.createElement(e.label) 
      e.attributes foreach { a => jn.setAttribute(a.key, a.value.mkString) } 
      jn 
     } 
     case a: Atom[_] => doc.createTextNode(a.text) 
     case c: Comment => doc.createComment(c.commentText) 
     case er: EntityRef => doc.createEntityReference(er.entityName) 
     case pi: ProcInstr => doc.createProcessingInstruction(pi.target, pi.proctext) 
     } 
     parent.appendChild(jnode) 
     node.child.map { build(_, jnode) } 
    } 

    build(n, doc) 
    doc 
    } 
} 
Cuestiones relacionadas