繁体   English   中英

一次更新和追加 xml

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM