Корневой элемент не должен повторяться, а дочерние узлы нужно только добавить в XML Dom Parser - PullRequest
0 голосов
/ 10 октября 2018

После отправки формы значения должны быть сохранены в файле XML.(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();
    }


}

Вывод, который я получил примерно так:

  <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>

Но ожидаемый результат -

<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>

Корневой элемент не должен повторяться идочерние узлы нужно только добавить.

Пожалуйста, помогите мне в этом.

Спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Я получил ответ.`

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;



}

`
...