我的XML文件如下所示:
<Messages>
<Contact Name="Robin" Number="8775454554">
<Message Date="24 Jan 2012" Time="04:04">this is report1</Message>
</Contact>
<Contact Name="Tobin" Number="546456456">
<Message Date="24 Jan 2012" Time="04:04">this is report2</Message>
</Contact>
<Messages>
我需要检查Contact元素的'Number'属性是否等于'somenumber',如果是,我需要在Contact元素中插入一个Message元素。
如何使用DOM实现?使用DOM会有什么缺点?
答案 0 :(得分:5)
使用DOM的主要缺点是必须立即将整个模型加载到内存中,而不是简单地解析文档,您可以限制一次保存在内存中的数据。在处理非常大的XML文档之前,这当然不是问题。
至于处理方面,以下内容应该有效:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(is);
NodeList contacts = dom.getElementsByTagName("Contact");
for(int i = 0; i < contacts.getLength(); i++) {
Element contact = (Element) contacts.item(i);
String contactNumber = contact.getAttribute("Number");
if(contactNumber.equals(somenumber)) {
Element newMessage = dom.createElement("Message");
// Configure the message element
contact.appendChild(newMessage);
}
}
答案 1 :(得分:2)
DOM有两个主要缺点:
如果时间和内存消耗对你来说是好的,但是没有详细程度,你仍然可以使用jOOX,我创建的库用于包装标准Java DOM对象以简化XML的操作。以下是一些如何使用jOOX实现您的需求的示例:
// With css-style selectors
String result1 = $(file).find("Contact[Number=somenumber]").append(
$("<Message Date=\"25 Jan 2012\" Time=\"23:44\">this is report2</Message>")
).toString();
// With XPath
String result2 = $(file).find("//Contact[@Number = somenumber]").append(
$("<Message Date=\"25 Jan 2012\" Time=\"23:44\">this is report2</Message>")
).toString();
// Instead of file, you can also provide your source XML in various other forms
请注意,jOOX仅包装标准Java DOM。基础操作(find()
和append()
以及$()
实际执行各种DOM操作。)
答案 2 :(得分:1)
你会为此做点什么。
NodeList
元素的Contact
。NodeList
并获取Contact
元素。Number
contact.getAttribute("Number")
contact
类型Element
。{/ li>
someNumber
,请致电Message
添加contact.appendChild()
。 Message
必须是元素。答案 3 :(得分:1)
使用Element类创建新元素
Element message = doc.createElement("Message");
message.setAttribute("message", strMessage);
现在使用
添加任何元素之后添加此元素elem.getParentNode().insertBefore(message, elem.getNextSibling());
答案 4 :(得分:0)
你可能想看一下this tutorial关于你想要做什么