DOM XML:写入文件并再次读取

时间:2015-09-09 13:54:23

标签: java xml dom

我正在使用DOM生成XML文件。

public void save() 
{
    if(readonly)
    {
        throw new WritingToLockedFileException();
    }
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer;
    try {
        transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(fileInfo);
        StreamResult result = new StreamResult(fileXML);
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"yes"); 
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
        transformer.transform(source, result);
        System.out.println("File saved!");
    } catch (TransformerException e) {
        throw new RuntimeException(e);
    }
}

当我使用

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"yes"); 
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

然后我得到[#text,lock,#text,testing,#text]而不是[lock,testing],当我评论这3行时,我得到了。有谁知道如何生成人类可读的XML文件,可以由DOM解析器重新编译。

该列表我正在使用此功能:

public List<String> getTags() 
{
    Element summary = (Element) fileInfo.getElementsByTagName("summary").item(0);
    Element tags = (Element) summary.getElementsByTagName("tags").item(0);
    NodeList list = tags.getChildNodes();
    List<String> taglist = new ArrayList<String>();
    for(int i=0; i<list.getLength(); i++)
    {
        taglist.add(list.item(i).getNodeName());
    }
    return taglist;
}

和XML人类可读的xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<summary>
    <tags>
        <lock/>
        <testing/>
    </tags>
</summary>

1 个答案:

答案 0 :(得分:1)

您看到的#text节点只是标签之间的文本空间(新行和缩进)。通常,您可能希望以某种方式使用这些文本块(如果不仅仅是空格)。但只要您不需要在您的情况下使用它们,只需将这些节点的跳过检查添加到for循环形成标记列表中:

button