[英]DOM XML: Write to file and read it again
我正在使用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节点只是标记(新行和缩进)之间的文本空间。 通常,您可能希望以某种方式使用这些文本块(如果不仅仅是空格)。 但是只要您不需要使用它们,只需将这些节点的跳过检查添加到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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.