代码之家  ›  专栏  ›  技术社区  ›  Rob Lourens

将空XML元素打印为开始标记、结束标记

  •  4
  • Rob Lourens  · 技术社区  · 16 年前

    有没有办法打印出像这样的空元素 <tag></tag> <tag />

    如果有帮助,将XML写入文件的代码:

    TransformerFactory t = TransformerFactory.newInstance();
    Transformer transformer = t.newTransformer();
    
    DOMSource source = new DOMSource(doc);
    StringWriter xml = new StringWriter();
    StreamResult result = new StreamResult(xml);
    transformer.transform(source, result);
    
    File f = new File("output.xml");
    FileWriter writer = new FileWriter(f);
    BufferedWriter out = new BufferedWriter(writer);
    out.write(xml.toString());
    out.close();
    

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Thorbjørn Ravn Andersen    16 年前

    http://en.wikipedia.org/wiki/Canonical_XML -在将它们与例如diff进行比较之前。

    jamesclark有一个小的Java程序来完成这个任务 http://www.jclark.com/xml/

        2
  •  1
  •   jdmichal    16 年前

    我假设空元素实际上是 ELEMENT_NODE 文档中没有子级的。请尝试向其添加空文本节点。这可能会诱使作者相信那里有一个文本节点,所以它会像有一个节点一样写出它。但是文本节点不会输出任何内容,因为它是一个空字符串。

    将文档作为两个参数调用此方法应该可以实现以下目的:

    private static void fillEmptyElementsWithEmptyTextNodes(
        final Document doc, final Node root)
    {
        final NodeList children = root.getChildNodes();
        if (root.getType() == Node.ELEMENT_NODE &&
            children.getLength() == 0)
        {
            root.appendChild(doc.createTextNode(""));
        }
    
        // Recurse to children.
        for(int i = 0; i < children.getLength(); ++i)
        {
            final Node child = children.item(i);
            fillEmptyElementsWithEmptyTextNodes(doc, child);
        }
    }