gpt4 book ai didi

Java XML 创建关闭 xml 语句但没有打开

转载 作者:行者123 更新时间:2023-12-01 13:36:01 25 4
gpt4 key购买 nike

我有一个创建 xml 文档的程序。

文件名在这里并不重要,因为文件已成功创建条目的数组列表包含一个唯一标识符和一个 HashMap 元素+值。元素如下:世界、名称、位置、类型和数据所有这些值都是字符串,唯一可能为空/空的值是数据我的问题是 xml 文件添加了所需的所有字段,但异常(exception)的数据字段。它给我留下了一个未打开的节点。实际结果:

<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) {
}
}

最佳答案

 <data/>  <---- this line should have the string "null"

这不是 XML 关闭元素标记(即 </data> )。它是一个 XML 空元素标记,将 open 和 close 组合成单个标记。它在语义上与 <data></data>相同 .

尽管您有这样的期望,但看起来空的 <data/>元素不是由带有文字“null”的路径创建的。将打印输出放入该代码中,或在调试器中运行它,以确认这一点。然后使用调试器,或根据需要添加额外的打印输出,以找出原因。

关于Java XML 创建关闭 xml 语句但没有打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com