java - DOM XML : Write to file and read it again

标签 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");

然后,当我评论这 3 行时,我得到的是 [#text, lock, #text,testing, #text],而不是我得到的 [lock,testing]。有谁知道如何生成人类可读的 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>

最佳答案

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

    for (int i=0; i<list.getLength(); i++) {
        org.w3c.dom.Node elem = list.item(i);
        if (elem.getNodeType() == org.w3c.dom.Node.TEXT_NODE && 
                elem.getNodeValue().trim().isEmpty()) {
            continue;
        }
        taglist.add(elem.getNodeName());
    }

关于java - DOM XML : Write to file and read it again,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32481495/

相关文章:

java - 向 JAXB 元素添加属性

python - 访问下一个同级的文本

javascript - 如何使用纯javascript从 Sprite 表中提取 Sprite

java - solrconfig.xml 更改后 SolrJ 中出现异常

java - 如何在java中使用对象列表的列表?

php - Android Web 服务 - "poke"Web 服务

javascript - 如何删除特定文本短语的所有实例?

Java如何在另一个类中使用 Activity 方法

java - 如何在派生类中共享方法而不包含在基类中

javascript - 如何使用 Javascript DOM 收集选定的下拉文本?