从单个 DOM 元素获取原始 xml 代码

Nei*_*eil 1 java xml parsing dom

我目前正在尝试使用 DOM 和 Java 语言获取 xml 的一部分。例如,我希望能够将 XML 元素(标签)及其子节点的原始代码作为字符串。

例子 :

XML 文件:

<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Run Code Online (Sandbox Code Playgroud)

目标是将其作为第一本书的元素:

    <book category="cooking">
     <title lang="en">Everyday Italian</title>
     <author>Giada De Laurentiis</author>
     <year>2005</year>
     <price>30.00</price>
    </book>
Run Code Online (Sandbox Code Playgroud)

我正在查看 Element 方法,但找不到对此有用的方法。

谢谢。

Ian*_*rts 6

W3C DOM 没有像某些替代 Java XML API 提供的方便的“toXML”,您需要使用 APIjavax.xml.transformorg.w3c.dom.ls.LSSerializer. 假设一个变量doc包含 DOM ,您可以获得这样的Document实例:LSSerializer

// import org.w3c.dom.ls.*;

DOMImplementationLS ls = (DOMImplementationLS)doc.getImplementation();
LSSerializer ser = ls.createLSSerializer();
Run Code Online (Sandbox Code Playgroud)

一旦您拥有其中之一,您就可以Node使用该文档将该文档中的任何内容序列化为 XML 字符串

String xml = ser.writeToString(node);
Run Code Online (Sandbox Code Playgroud)