【问题标题】:XML Node to String in JavaJava中的XML节点到字符串
【发布时间】:2011-05-23 16:58:53
【问题描述】:

我遇到了这个将 XML 节点转换为 Java 字符串表示的 Java 函数:

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 节点:

<p><media type="audio" id="au008093" rights="wbowned">
<title>Bee buzz</title>
</media>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.</p>

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

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

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

我有点困惑,在此先感谢您的慷慨帮助。

【问题讨论】:

    标签: java xml


    【解决方案1】:

    您在 DOM 树中有一个 XML 表示。
    例如,您打开了一个 XML 文件,并在 DOM 解析器中传递了它。
    因此,您的 XML 会在内存中创建一个 DOM 树。
    现在您只能通过遍历 DOM 树来访问 XML 信息。
    如果您需要,您可以使用转换的 DOM 树的 XML 信息的字符串表示形式。
    发生这种情况是因为无法直接从 DOM 树中获取字符串表示。
    因此,如果例如 Node node 您传入的 nodeToString 是 XML 文档的根元素,则结果是包含原始 XML 数据的字符串。
    标签仍然存在。 IE。您将拥有一个有效的 XML 表示。只有这一次将在一个字符串变量中。

    例如:

      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. E.g no xml declaration. Add it
      xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> + xml;//bad to append this way...
      System.out.println("XML is:"+xml);
    

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

    【讨论】:

      【解决方案2】:

      所有重要的都已经说了。我尝试编译以下代码。

      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 = "<p>" + " <media type=\"audio\" id=\"au008093\" rights=\"wbowned\">" + " <title>Bee buzz</title>" + " " + " 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." + "</p>"; 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(); } }

      它产生了以下输出:

      <p> <media id="au008093" rights="wbowned" type="audio"> <title>Bee buzz</title> </media> 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.</p>

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2016-02-13
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多