gpt4 book ai didi

java - 如何通过 ID 和 NamedNodeMap 获取 XML 节点 - Java DOM XML

转载 作者:行者123 更新时间:2023-11-30 09:26:24 26 4
gpt4 key购买 nike

我有一个包含消息的 xml 文件:

<bus>
<message id="58afdb36-9080-4dd8-922e-ee516b2b5073">
<retrievedDate>Mon Feb 18 14:43:23 GMT 2013</retrievedDate>
<addedDate>Mon Feb 18 14:43:23 GMT 2013</addedDate>
<state>initialised</state>
<content>content placeholder</content>
</message>
</bus>

我正在创建一种方法来更改给定 ID 的消息状态。

但是,当我尝试获取具有我想要的 ID 的节点时,我不断收到 NullPointerException。已尝试使用 getElementByIdgetElementsByTagName 进行试验,但我总是得到 null 而不是我想要的节点。

public static int updateMessageState(UUID messageID, String newState) 
throws ParserConfigurationException,
SAXException, IOException, TransformerException {

String filepath = "data.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);

// Get Message
Node message = doc.getElementById(messageID.toString());

// Find and update the state
NamedNodeMap atrMap = message.getAttributes();
Node nodeAtr = atrMap.getNamedItem("state");
nodeAtr.setTextContent(newState);

// Save write to XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);

return 0;
}

最佳答案

当使用 getElementById() 时,您必须确保属性“id”的typeID 否则将返回 null从方法。参见 here .

我没有看到您如何使用 getElementsByTagName(String str) 的示例,因此我将提供一个示例。使用 getElementsByTagName() 时,您实际上会得到一个与具有标签的元素相对应的 NodeList。在您的示例中,您将使用 doc.getElementsByName("message") 来检索消息元素的节点列表。然后,您可以使用节点列表找到您要查找的内容。

关于java - 如何通过 ID 和 NamedNodeMap 获取 XML 节点 - Java DOM XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939667/

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