gpt4 book ai didi

java - 使用 JOOX 过滤 XML 元素,然后写入完整文档

转载 作者:行者123 更新时间:2023-12-02 04:41:31 31 4
gpt4 key购买 nike

想象一个像这样的 XML 文档:

<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book name="book1"></book>
<book name="book2"></book>
</books>

我想在过滤掉一些书籍后将文档写入一个新文件。我正在使用 JOOX 并有一些如下代码:

final FastFilter nameFilter = new FastFilter() {
final Set<String> validNames = new HashSet<>();//contains "book1"
@Override public boolean filter(Context context) {
return !validNames.contains($(context).attr("name"));
}
};
final Document doc = $(new StringReader("entire text of xml document...")).document();
final Match m = $(doc).find("book").remove(nameFilter);

我尝试过这样的事情m.write(new File(output.xml)); ,但只输出:

<book name="book1"></book>

换句话说,它缺少父元素 <books>以及初始 XML 声明。知道如何实现这一点吗?寻找一个简单/优雅的解决方案,最好使用 JOOX,而不是 20 行 DOM 代码:)

最佳答案

您可能已经明白了这一点,但如果您还没有:

示例中的 Match m 代表您要删除的元素*,在本例中为 name="book1"的 book 元素。当您调用write()时在匹配上,仅写入该匹配的元素。因此,当你这样做 m.write(new File(output.xml));你最终会得到

<book name="book1"></book> 

但是,remove 方法会从您用于创建/查找匹配的文档中删除由匹配项表示的元素(即名称为“book1”的 book 元素)。所以当你这样做 remove(nameFilter) ,该元素实际上已从文档 doc 中删除。

从文档中删除元素后,如果您希望将整个编辑文档写入文件,您可以调用文档本身(的匹配)的写入方法:

$(doc).write(new File(output.xml)); 

*) 请注意,一个 Match 可以包含多个元素。您可以使用m.size()检查匹配中的元素数量。

关于java - 使用 JOOX 过滤 XML 元素,然后写入完整文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131759/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com