[英]Updating and appending xml at a time
我有一个模板 XML
<Students>
<list>
<schoolName>XYZ</schoolName>
<student>
<name></name>
<rollno></rollno>
</student>
</list>
</Students>
此外,我有一个学生列表,我需要添加姓名和卷号,append 和 xml 具有相同的属性,具体取决于列表的大小。 要求是 - 如果我只有 1 个学生,我只需要使用列表中的值更新属性,如果列表大小大于 1,它应该 append 到学生标签。
<Students>
<list>
<schoolName>XYZ</schoolName>
<student>
<name>AA</name>
<rollno>1</rollno>
<student>
<student>
<name>BB</name>
<rollno>2</rollno>
</student>
</list>
</Students>
我做不到,所以我尝试使用此代码
public static void main(String[] args) throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse("student.xml");
Element root = document.getDocumentElement();
Collection<Student> students= new ArrayList<Student>();
for (Student st: students) {
// server elements
Element newStudnet = document.createElement("student");
Element name = document.createElement("name");
name.appendChild(document.createTextNode("B");
newStudnet.appendChild(name);
Element rollno= document.createElement("rollno");
rollno.appendChild(document.createTextNode("2");
newStudnet.appendChild(rollno);
root.appendChild(newStudnet);
}
DOMSource source = new DOMSource(document);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
StreamResult result = new StreamResult("student.xml");
transformer.transform(source, result);
}
如果我这样做,这个学生标签是在最后而不是像这样的第一个学生标签旁边添加的
<Students>
<list>
<schoolName>XYZ</schoolName>
<student>
<name></name>
<rollno></rollno>
</student>
</list>
</Students>
<student>
<name>B</name>
<rollno>2</rollno>
</student>
有人可以帮助我找到方法。 我有一个学生名单,其中更新了姓名和卷号,我想 append 和 xml 与条目。
您将学生附加到 XML 树的根目录:
root.appendChild(newStudnet);
这就是为什么它最终附加到根目录的原因。
您需要找到该列表和 append :
Node list = document.getElementsByTagName("list").item(0);
list.appendChild(newStudnet);
你应该做一些错误检查以防<list>
丢失,或者有多个。
顺便说一句,拥有一个包含两种不同实体类型(schoolName 和 student)的列表是自找麻烦——您需要根据实体的顺序来将学校名称与学生的子集相关联。
相反,您应该拥有:
<schools>
<school>
<name>MIT</name>
<students>
<student>
...
</student>
</students>
</school>
...
</schools>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.