java : xml anak tidak terhapus menggunakan deleteChild

Saya memiliki XML seperti yang diberikan di bawah ini. Saya ingin menghapus tag kosong secara rekursif dari tag yang sama. Seperti halnya, setelah tag f dihapus, tag e harus dihapus dan ketika tag e dihapus, tag d kosong dan karenanya juga harus dihapus.

<Test>
  <a>test</a>
  <b>test</b>
  <c></c>
     <d>
        <e>
           <f> </f>
        </e>
     </d>
</Test>

hasilnya seharusnya

<Test>
  <a>test</a>
  <b>test</b>
</Test>

Saya dapat menghapus tag tetapi saya tidak dapat menghapus tag karena ada ruang kosong. Meskipun saya dapat mengidentifikasi ini sebagai tag yang akan dihapus tetapi ketika saya memanggil deleteChild() pada induknya, tag tersebut tidak dihapus dari XML. Dalam kode saat melakukan debug, ini menunjukkan jumlah anak e setelah memanggil deleteChild() sebagai nol. Tapi masih tetap di xml??

Tolong bisakah Anda membantu saya apa yang saya lakukan salah.

Silakan temukan di bawah kode saya yang saya gunakan.

for (Element childElement : toRemove) {
        Node parentNode = childElement.getParentNode();
        System.out.println("Removing null or empty node :: " + childElement.getNodeName());

        if(parentNode!=null){
            NodeList childList = parentNode.getChildNodes();
            System.out.println("List of Childer before deleting :: " + childList.getLength());

            parentNode.removeChild(childElement);
            clean(parentNode);

            childList = parentNode.getChildNodes();
            int childCount = childList.getLength();

            for (int i = 0; i < childCount; i++) {
                Node childNode = childList.item(i);
                System.out.println("Childs :: " + childNode);
            }

            for (int i = 0; i < childCount; i++) {
                Node childNode = childList.item(i);
                if(childNode!=null){
                    System.out.println("Child before deleting :: " + childNode);

                    if (childNode instanceof Element == false){
                        if(childNode.getNodeValue().trim().isEmpty()){
                            System.out.println("found unwanted :: " + childNode.getNodeName());

                            parentNode.removeChild(childNode);
                            i--;
                            childCount--;
                            clean(parentNode);
                        }
                    }
                }
            }

            childList = parentNode.getChildNodes();
            System.out.println("List of Childer after deleting :: " + childList.getLength());
        }
    }

person user2500313    schedule 29.12.2014    source sumber
comment
Jika tidak ada celah di antara tag seperti pada ‹f› ‹/f›, jika tagnya seperti ‹f›‹/f›, itu tanpa ruang kosong di tengahnya. Itu dapat menghapus tag. Saya bahkan mencoba menetapkan nilai sebagai nol atau kosong untuk node sebelum menghapusnya, tetapi itu juga tidak berhasil. Tolong bantu !!!!!   -  person user2500313    schedule 30.12.2014


Jawaban (1)


Dari kode Anda, Anda hanya memeriksa nilai simpul yang kosong. Namun akan lebih baik jika menambahkan lebih banyak ketentuan. Node anak mungkin tidak hanya Kosong, tetapi mungkin juga bernilai nol. <f/> akan mengembalikan Anda nol

Oleh karena itu pastikan semua kemungkinan null, kosong dan spasi dapat menghapus node anak.

person Krishanthy Mohanachandran    schedule 22.01.2015