java - 在 Java 中删除 XML 元素

标签 java xml eclipse

我有一个 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 中的歌曲匹配,它不会被删除吗?没有异常(exception)。

最佳答案

您需要删除相关节点,在您的代码中您正在删除似乎不正确的 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);

关于java - 在 Java 中删除 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751326/

相关文章:

java - 结合 Google Maps API 和 Google Maps Data API

java - 使用 XMLUnit 忽略大小写

javascript - 从 xml 动态添加图像和 src

android - SVN错误: Failed to add directory 'bin/classes/com'

java - getActionbar() 的空指针异常

java - 如何在 map 中拥有具有多个值的键?

TomEE 上的 Eclipse 部署错误

java - Android中的SQLite如何更新特定行

java - 如何有效实现数据库功能?

java - GPathResult ..存在或不存在节点