簡體   English   中英

在Java中刪除XML元素

[英]Deleting XML element in Java

我有一個XML:

<?xml version="1.0" encoding="UTF-8"?>
    <songs>
        <song>
            <title>Gracious</title>
            <artist>Ben Howard</artist>
            <genre>Singer/Songwriter</genre>
        </song>
        <song>
            <title>Only Love</title>
            <artist>Ben Howard</artist>
            <genre>Singer/Songwriter</genre>
        </song>
        <song>
            <title>Bad Blood</title>
            <artist>Bastille</artist>
            <genre>N/A</genre>
        </song>
        <song>
            <title>Keep Your Head Up</title>
            <artist>Ben Howard</artist>
            <genre>Singer/Songwriter</genre>
        </song>
        <song>
            <title>Intro</title>
            <artist>Alt-J</artist>
            <genre>Alternative</genre>
        </song>
    </songs>

我的Java代碼是:

public static void deleteSong(Song song) {
        String songTitle = song.getTitle();
        String songArtist = song.getArtist();
        String songGenre = song.getGenre();

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            File file = new File("songs.xml");
            Document doc = db.parse(file);

            NodeList songList = doc.getElementsByTagName("song");

            if (songList != null && songList.getLength() > 0) {
                for (int i = 0; i < songList.getLength(); i++) {

                    Node node = songList.item(i);
                    Element e = (Element) node;
                    NodeList nodeList = e.getElementsByTagName("title");
                    String title = nodeList.item(0).getChildNodes().item(0)
                            .getNodeValue();
                    nodeList = e.getElementsByTagName("artist");
                    String artist = nodeList.item(0).getChildNodes().item(0)
                            .getNodeValue();
                    nodeList = e.getElementsByTagName("genre");
                    String genre = nodeList.item(0).getChildNodes().item(0)
                            .getNodeValue();
                    System.out.println(title + " Title");
                    System.out.println(songTitle + " SongTitle");

                    if (title.equals(songTitle)) {
                        if (artist.equals(songArtist)) {
                            if (genre.equals(songGenre)) {

                                doc.getFirstChild().removeChild(node);
                            }
                        }
                    }
                }
            }
            MainDisplay.main(null);
        } catch (Exception e) {
            System.out.println(e);
        }   
    }

要刪除的歌曲將傳遞到方法中,然后與xml文件中的歌曲進行比較。 但是,如果歌曲與xml中的歌曲匹配,則不會刪除? 沒有例外。

您需要刪除相關節點,在您的代碼中刪除似乎不正確的firstchild節點。

並將您的更改寫回文件。

 if (title.equals(songTitle) && artist.equals(songArtist) && genre.equals(songGenre) ) {

                 node.getParentNode().removeChild(node);
  }

//寫回xml文件

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);

從我看到的,你只是閱讀文件。 在某些時候,您必須將更改刷新回XML文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM