【问题标题】:What do you mean by "Serialize a DOM Node"? [closed]“序列化 DOM 节点”是什么意思? [关闭]
【发布时间】:2019-01-01 21:09:55
【问题描述】:

我们一直在处理这段代码,其中使用 XPATH 导航 XML,我们希望记录在 xpath 中获得的任何内容。在记录时,如果我们遇到一个 XML 元素,那么它会返回为 NULL。因为getNodeValue() 在遇到 XML 元素时返回 null。因此,我们希望将在 XPath 中获得的任何内容序列化为字符串并立即将其打印到日志中。

【问题讨论】:

    标签: java dom xpath serialization


    【解决方案1】:

    在 Java 世界中,假设 DOM 表示 W3C DOM,您有两个选择,或者创建一个默认的 Transformer https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/Transformer.htmlTransformerFactory.newInstance(),并使用它来将您的 DOM 节点作为 DOMSource 提供给 @987654331 @ 方法https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/Transformer.html#transform-javax.xml.transform.Source-javax.xml.transform.Result,在StringWriter 上使用正确的结果,如StreamResult,这样您就可以将结果作为字符串。或者使用LSSerializerhttps://docs.oracle.com/javase/8/docs/api/org/w3c/dom/ls/LSSerializer.html,它有一个方法writeToStringhttps://docs.oracle.com/javase/8/docs/api/org/w3c/dom/ls/LSSerializer.html#writeToString-org.w3c.dom.Node-。创建LSSerializer 需要您创建https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/ls/DOMImplementationLS.html 或将DOMImplementation 强制转换为DOMImplementationLS。

    网上有各种各样的例子,例如Transformer方法见https://docs.oracle.com/javase/tutorial/jaxp/xslt/writingDom.html或LSSerializer的http://www.java2s.com/Tutorials/Java/XML/DOM/Output_XML_DOM_tree_with_LSSerializer_in_Java.htm

    【讨论】:

    • 非常感谢您的超级快速回复,但我想知道是否有任何方法可以序列化整个 Nodelist。如果我的用户要给一个带有 child::node() 的 XPath,这将导致一个 Nodelist。
    • 我认为 Java XML API 中没有一种方法可以序列化 W3C DOM NodeList,但是通过迭代 NodeList 并应用上面的两种方法到每个节点并连接结果。
    猜你喜欢
    • 2022-10-31
    • 2011-04-30
    • 2011-03-26
    • 2021-10-02
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多