Java中的XML节点到字符串

我遇到了这个Java函数来将XML节点转换为Java String表示:

private String nodeToString(Node node) { StringWriter sw = new StringWriter(); try { Transformer t = TransformerFactory.newInstance().newTransformer(); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.transform(new DOMSource(node), new StreamResult(sw)); } catch (TransformerException te) { System.out.println("nodeToString Transformer Exception"); } return sw.toString(); } 

它看起来很简单,因为它希望输出字符串没有任何XML声明,并且它必须包含缩进。

但我想知道实际输出应该如何,假设我有一个XML节点:

 

Bee buzz Most other kinds of bees live alone instead of in a colony. These bees make tunnels in wood or in the ground. The queen makes her own nest.

在应用上述转换后,我可以假设结果字符串是:

 "media type="audio" id="au008093" rights="wbowned" title Bee buzz title /media" 

我想自己测试一下,但我不知道如何以这个函数实际需要的方式表示这个XML节点。

我有点困惑,并提前感谢慷慨的帮助。

您在DOM树中有XML重新表示。
例如,您已经打开了一个XML文件,并且已经在DOM解析器中传递了它。
因此,创建了内存中包含XML的DOM树。
现在,您只能通过遍历DOM树来访问XML信息。
但是,如果需要,可以使用DOM树的XML信息的String表示forms来进行转换。
这是因为无法直接从DOM树获取String表示。
因此,例如,如果您在nodeToString传递的Node node是XML doc的根元素,则结果是包含原始XML数据的String。
标签仍然存在。 即您将拥有有效的XML表示。 只有这一次才会在String变量中。

例如:

  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); Document xmlDoc = parser.parse(file);//file has the xml String xml = nodeToString(xmlDoc.getDocumentElement());//pass in the root //xml has the xml info. Eg no xml declaration. Add it xml = " + xml;//bad to append this way... System.out.println("XML is:"+xml); 

免责声明:甚至没有尝试编译代码。 希望你明白你必须做什么

所有重要的事情都已经说过了。 我试着编译以下代码。

import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Node; public class Test { public static void main(String[] args) throws Exception { String s = "

" + " " + " Bee buzz" + " " + " Most other kinds of bees live alone instead of in a colony." + " These bees make tunnels in wood or in the ground." + " The queen makes her own nest." + "

"; InputStream is = new ByteArrayInputStream(s.getBytes()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(is); Node rootElement = d.getDocumentElement(); System.out.println(nodeToString(rootElement)); } private static String nodeToString(Node node) { StringWriter sw = new StringWriter(); try { Transformer t = TransformerFactory.newInstance().newTransformer(); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.transform(new DOMSource(node), new StreamResult(sw)); } catch (TransformerException te) { System.out.println("nodeToString Transformer Exception"); } return sw.toString(); } }
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Node; public class Test { public static void main(String[] args) throws Exception { String s = "

" + " " + " Bee buzz" + " " + " Most other kinds of bees live alone instead of in a colony." + " These bees make tunnels in wood or in the ground." + " The queen makes her own nest." + "

"; InputStream is = new ByteArrayInputStream(s.getBytes()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(is); Node rootElement = d.getDocumentElement(); System.out.println(nodeToString(rootElement)); } private static String nodeToString(Node node) { StringWriter sw = new StringWriter(); try { Transformer t = TransformerFactory.newInstance().newTransformer(); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.transform(new DOMSource(node), new StreamResult(sw)); } catch (TransformerException te) { System.out.println("nodeToString Transformer Exception"); } return sw.toString(); } }

它产生了以下输出:

Bee buzz Most other kinds of bees live alone instead of in a colony. These bees make tunnels in wood or in the ground. The queen makes her own nest.

Bee buzz Most other kinds of bees live alone instead of in a colony. These bees make tunnels in wood or in the ground. The queen makes her own nest.

你可以自己进一步调整它。 祝你好运!