我有一个创建xml doc的程序。
文件名在这里不重要,因为文件确实成功创建 条目的arraylist包含唯一标识符和哈希映射 元素+价值观。元素如下:世界,名称,位置,类型和数据 所有这些值都是字符串,唯一一个空白/空的是数据 我的问题是xml文件根据需要添加了所有字段和异常 数据字段。它给我留下了一个未打开的节点。实际结果:
<NPC>
<NPC:0>
<name>
the_name
</name>
<data/> <---- this line should have the string "null"
<loc>
2529.1294962948955:
69.0:
951.2612160649056
</loc>
<type>
Quest
</type>
<world>
world
</world>
</NPC:0>
</NPC>
我创建xml文件的方法。
public void updateXML(String fileName, ArrayList<XMLEntry> entries)
{
File file = getFileByName(fileName);
try {
DocumentBuilderFactory bFac = DocumentBuilderFactory.newInstance();
DocumentBuilder b = bFac.newDocumentBuilder();
Document doc = b.parse(file);
for(int i = 0; i < entries.size(); i++)
{
XMLEntry entry = entries.get(i);
Node entry_node = doc.getElementsByTagName(entry.getName()).item(0);
if(entry_node == null)
{
Element node = doc.createElement(entry.getName());
doc.getFirstChild().appendChild(node);
entry_node = doc.getElementsByTagName(entry.getName()).item(0);
}
for (Map.Entry<String, String> attributes : entry.getAttributes().entrySet())
{
NamedNodeMap xml_attributes = entry_node.getAttributes();
Node attribute = xml_attributes.getNamedItem(attributes.getKey());
if(attribute == null)
{
if(attributes.getValue() != "" || attributes.getValue() != null)
{
Element new_xml_attribute = doc.createElement(attributes.getKey());
new_xml_attribute.appendChild(doc.createTextNode(attributes.getValue()));
entry_node.appendChild(new_xml_attribute);
} else {
Element new_xml_attribute = doc.createElement(attributes.getKey());
new_xml_attribute.appendChild(doc.createTextNode("null"));
entry_node.appendChild(new_xml_attribute);
}
} else {
attribute.setTextContent(attributes.getValue());
}
TransformerFactory tFac = TransformerFactory.newInstance();
Transformer ts = tFac.newTransformer();
DOMSource src = new DOMSource(doc);
StreamResult result = new StreamResult(file);
ts.transform(src, result);
}
}
} catch (ParserConfigurationException e) {
} catch (TransformerException e1) {
} catch (IOException e2) {
} catch (SAXException e3) {
}
}
答案 0 :(得分:1)
<data/> <---- this line should have the string "null"
这不是XML close-element标记(可能是</data>
)。它是一个XML空元素标记,它将open和close组合成一个标记。它与<data></data>
在语义上相同。
尽管您有所期望,但似乎空文件<data/>
没有由文字“null”的路径创建。将打印输出放入该代码中,或在调试器中运行,以确认这一点。然后使用调试器,或根据需要放入其他打印输出,以找出原因。