简体   繁体   English

根元素不应重复,并且子节点仅需要附加到XML Dom Parser中

[英]Root element shouldn't be repeat and, the child nodes only needed to be appended in XML Dom Parser

After form submission, the values are to be stored in an XML file. 表单提交后,值将存储在XML文件中。 (XML Dom PArser) Below given the program which I tried to do the same. (XML Dom PArser)下面给出了我尝试做的相同程序。

public  void writeXMLfile(ApplyLieuDto lieuDto) {

    String satDte = 
    Util.convertUtilDateToString(lieuDto.getSatDutyDteUtil());
    //String satDteAMPM = lieuDto.getSatDutyDteAmPm();

    //String satDutyDte = satDte + satDteAMPM;

    String offDte = Util.convertUtilDateToString(lieuDto.getOffDteUtil());
    //String offDteAMPM = lieuDto.getOffDteAmPm();

    //String offDate = offDte + offDteAMPM;

    String modDate = 
     Util.convertUtilDateToString(lieuDto.getDateUpdateUtil());

    String filePath = "file.xml";


    try {
        DocumentBuilderFactory docFactory = 
         DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("lieu");
        doc.appendChild(rootElement);


        // staff elements
        Element staff = doc.createElement("staff");
        rootElement.appendChild(staff);

        // set attribute to staff element
        Attr attr = doc.createAttribute("id");
        attr.setValue(lieuDto.getStaffId());
        staff.setAttributeNode(attr);

        // name elements
        Element firstname = doc.createElement("name");
        firstname.appendChild(doc.createTextNode(lieuDto.getName()));
        staff.appendChild(firstname);

        // contact number elements
        Element contact = doc.createElement("contactnumber");
        contact.appendChild(doc.createTextNode(lieuDto.getContact()));
        staff.appendChild(contact);

        // email  elements
        Element email = doc.createElement("email");
        email.appendChild(doc.createTextNode(lieuDto.getEmail()));
        staff.appendChild(email);

        // satdutydate  elements
        Element satDutyDate = doc.createElement("satDte");
        satDutyDate.appendChild(doc.createTextNode(satDte));
        staff.appendChild(satDutyDate);

        // satdutydateAMPM  elements
        Element satDutyDateAMPM = doc.createElement("satDteAMPM");

        satDutyDateAMPM.appendChild(doc.createTextNode
        (lieuDto.getSatDutyDteAmPm()));
        staff.appendChild(satDutyDateAMPM);

        // offDate  elements
        Element offDat = doc.createElement("offdate");
        offDat.appendChild(doc.createTextNode(offDte));
        staff.appendChild(offDat);

        // offDateAMPM  elements
        Element offDatAMPM = doc.createElement("offdateAMPM");
        offDatAMPM.appendChild(doc.createTextNode(lieuDto.getOffDteAmPm()));
        staff.appendChild(offDatAMPM);

        // appOfficer  elements
        Element appOfficer = doc.createElement("approvingofficer");

       appOfficer.appendChild(doc.createTextNode
      (lieuDto.getApprovingOfficer()));
        staff.appendChild(appOfficer);

        // Date  elements
        Element modifieddate = doc.createElement("modifieddate");
        modifieddate.appendChild(doc.createTextNode(modDate));
        staff.appendChild(modifieddate);

        // status  elements
        Element status = doc.createElement("status");
        status.appendChild(doc.createTextNode(lieuDto.getStatus()));
        staff.appendChild(status);

        // write the content into xml file
        TransformerFactory transformerFactory = 
        TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new 
        FileWriter(filePath,true));

        // Output to console for testing
        StreamResult strmResult = new StreamResult(System.out);

        transformer.transform(source, result);
        transformer.transform(source, strmResult);


        System.out.println("File saved!");

    } catch (ParserConfigurationException e) {

        e.printStackTrace();
    } catch (TransformerConfigurationException e) {

        e.printStackTrace();
    } catch (TransformerException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }


}

The output I got as something like this below 我得到的输出如下所示

  <company>
<staff id="1">
    <firstname>Priya</firstname>
    <lastname>Rajan</lastname>
    <salary>100000</salary>
</staff>
</company>
<company>
<staff id="2">
    <firstname>Peter</firstname>
    <lastname>Jas</lastname>
    <salary>100000</salary>
</staff>
 </company>

But, the expected result is 但是,预期结果是

<company>
<staff id="1">
    <firstname>Priya</firstname>
    <lastname>Rajan</lastname>
    <salary>100000</salary>
</staff>

<staff id="2">
    <firstname>Peter</firstname>
    <lastname>Jas</lastname>
    <salary>100000</salary>
 </staff>
 </company>

Root element shouldn't be repeat and, the child nodes only needed to be appended. 根元素不应重复,子节点仅需附加。

Please help me on this. 请帮我。

Thanks. 谢谢。

I got the answer. 我得到了答案。 ` `

public  boolean writeXMLfile(ApplyLieuDto lieuDto)
{

    boolean isAdded = false;

    String filePath = "file.xml";

     DocumentBuilderFactory documentBuilderFactory = 
 DocumentBuilderFactory.newInstance();

     try {
        DocumentBuilder documentBuilder = 
  documentBuilderFactory.newDocumentBuilder();
        Document doc = documentBuilder.parse(filePath);

        NodeList oldList = doc.getElementsByTagName("staff");

        int oldListCount = oldList.getLength();

        System.out.println("Old List Count Value :: "+oldListCount);

        Element root = doc.getDocumentElement();
        Element rootElement = doc.getDocumentElement();

        Collection<ApplyLieuDto> svr = new ArrayList<ApplyLieuDto>();
        svr.add(lieuDto);

        for(ApplyLieuDto lieu : svr)
        {



            Element staff = doc.createElement("staff");
            rootElement.appendChild(staff);

            // set attribute to staff element
            Attr attr = doc.createAttribute("id");
            attr.setValue(lieu.getStaffId());
            staff.setAttributeNode(attr);

            Element firstname = doc.createElement("name");
            firstname.appendChild(doc.createTextNode(lieu.getName()));
            staff.appendChild(firstname);

            // contact number elements
            Element contact = doc.createElement("contactnumber");
            contact.appendChild(doc.createTextNode(lieu.getContact()));
            staff.appendChild(contact);

            // email  elements
            Element email = doc.createElement("email");
            email.appendChild(doc.createTextNode(lieu.getEmail()));
            staff.appendChild(email);

            String satDte = Util.convertUtilDateToString(lieu.getSatDutyDteUtil());

            // satdutydate  elements
            Element satDutyDate = doc.createElement("satDte");
            satDutyDate.appendChild(doc.createTextNode(satDte));
            staff.appendChild(satDutyDate);

            // satdutydateAMPM  elements
            Element satDutyDateAMPM = doc.createElement("satDteAMPM");

     satDutyDateAMPM.appendChild(doc.createTextNode(lieu.getSatDutyDteAmPm()));
            staff.appendChild(satDutyDateAMPM);

            String offDte = Util.convertUtilDateToString(lieu.getOffDteUtil());

            // offDate  elements
            Element offDat = doc.createElement("offdate");
            offDat.appendChild(doc.createTextNode(offDte));
            staff.appendChild(offDat);

            // offDateAMPM  elements
            Element offDatAMPM = doc.createElement("offdateAMPM");
            offDatAMPM.appendChild(doc.createTextNode(lieu.getOffDteAmPm()));
            staff.appendChild(offDatAMPM);

            // appOfficer  elements
            Element appOfficer = doc.createElement("approvingofficer");
            appOfficer.appendChild(doc.createTextNode(lieu.getApprovingOfficer()));
            staff.appendChild(appOfficer);

            String modDate = Util.convertUtilDateToString(lieu.getDateUpdateUtil());

            // Date  elements
            Element modifieddate = doc.createElement("modifieddate");
            modifieddate.appendChild(doc.createTextNode(modDate));
            staff.appendChild(modifieddate);

            // status  elements
            Element status = doc.createElement("status");
            status.appendChild(doc.createTextNode(lieu.getStatus()));
            staff.appendChild(status);


            root.appendChild(staff);
       }

        DOMSource source = new DOMSource(doc);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        StreamResult result = new StreamResult(filePath);
        StreamResult strmResult = new StreamResult(System.out);

        transformer.transform(source, result);
        transformer.transform(source, strmResult);

        NodeList newList = doc.getElementsByTagName("staff");

        int newListCount = newList.getLength();

        System.out.println("New List Count Value :: "+newListCount);

        if(newListCount > oldListCount)
        {
            isAdded = true;
        }
    } catch (ParserConfigurationException e) {

        e.printStackTrace();
    } catch (SAXException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    } catch (TransformerConfigurationException e) {

        e.printStackTrace();
    } catch (TransformerException e) {

        e.printStackTrace();
    }


     return isAdded;



}

`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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