从scala的XML到w3c DOM的任何转换?

Itt*_*ayD 9 xml dom scala

对于使用第三方库,我需要一个w3c DOM文档.但是,在Scala中创建xml节点更容易.所以我正在寻找一种将scala xml元素转换为w3c dom的方法.显然,我可以序列化为一个字符串并解析它,但我正在寻找更高效的东西.

Mit*_*ins 7

这是一个可以构建的简单(无命名空间)版本.应该给出这个想法.只需将doc.createFoo(...)调用替换为等效的doc.createFooNS(...)调用.此外,可能需要更智能地处理属性.但是,这应该适用于简单的任务.

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
  }
}
Run Code Online (Sandbox Code Playgroud)