【问题标题】:Any conversion from scala's XML to w3c DOM?从 scala 的 XML 到 w3c DOM 的任何转换?
【发布时间】:2010-01-04 22:19:23
【问题描述】:

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

【问题讨论】:

    标签: xml dom scala


    【解决方案1】:

    这是一个可以构建的简单(无命名空间)版本。应该给出想法。只需将 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
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2016-10-04
      • 2011-02-28
      相关资源
      最近更新 更多