gpt4 book ai didi

java - 如何对 XML 标签进行分组

转载 作者:行者123 更新时间:2023-11-30 06:15:50 25 4
gpt4 key购买 nike

我正在尝试通过对元素进行分组来修改 xml 格式。在下面的格式中,将使用文章的前三个元素(ID、NAME 和 CITY)对 MEDIA 元素进行分组,这意味着如果 (ID、NAME 和 CITY) 元素与另一篇文章中的其他三个元素具有相同的信息,则 MEDIA 元素将分组在 (ID、NAME 和 CITY) 元素下。

例如:

输入

<Article>
<ID>100</ID>
<NAME>A</NAME>
<CITY>XX</CITY>
<MEDIA>
<MEDIANAME>PPP</MEDIANAME>
<MEDIACOLOR>RED></MEDIACOLOR>
</MEDIA>
</Article>
<Article>
<ID>100</ID>
<NAME>A</NAME>
<CITY>XX</CITY>
<MEDIA>
<MEDIANAME>PPC</MEDIANAME>
<MEDIACOLOR>YELLOW></MEDIACOLOR>
</MEDIA>
</Article>
<Article>
<ID>101</ID>
<NAME>B</NAME>
<CITY>YY</CITY>
<MEDIA>
<MEDIANAME>PPX</MEDIANAME>
<MEDIACOLOR>BLACK></MEDIACOLOR>
</MEDIA>
</Article>
<Article>
<ID>101</ID>
<NAME>B</NAME>
<CITY>YY</CITY>
<MEDIA>
<MEDIANAME>PPZ</MEDIANAME>
<MEDIACOLOR>PURPLE></MEDIACOLOR>
</MEDIA>
</Article>

输出

<Article>
<ID>100</ID>
<NAME>A</NAME>
<CITY>XX</CITY>
<MEDIA>
<MEDIANAME>PPP</MEDIANAME>
<MEDIACOLOR>RED></MEDIACOLOR>
</MEDIA>
<MEDIA>
<MEDIANAME>PPC</MEDIANAME>
<MEDIACOLOR>YELLOW></MEDIACOLOR>
</MEDIA>
</Article>
<Article>
<ID>101</ID>
<NAME>B</NAME>
<CITY>YY</CITY>
<MEDIA>
<MEDIANAME>PPX</MEDIANAME>
<MEDIACOLOR>BLACK></MEDIACOLOR>
</MEDIA>
<MEDIA>
<MEDIANAME>PPZ</MEDIANAME>
<MEDIACOLOR>PURPLE></MEDIACOLOR>
</MEDIA>
</Article>

我可以知道如何使用 java 实现这一点吗?我将只接收这种格式的 xml,所以我剩下的唯一选择就是修改文件以对元素进行分组。这只是一个示例,实际文件比这大得多,元素数量也更多。

注意:我可以编写代码,但无法找到任何方法来实现此目的。欢迎任何观点或想法:)

最佳答案

您需要做几件事。

  1. 您需要将 XML 读入 Java。有一个名为 JAXB 的库可以做到这一点。 JAXB 将帮助您将 Java 编码到 XML 或从 XML 解码。
  2. 您需要定义您的信息模型。从表面上看,您有一个名为 Article 的类,其中包含 3 个(字符串)字段,名为 id、name 和 city,它们共同构成了该类实例的唯一标识符。然后,您将获得一个媒体对象列表,每个对象都由名称和颜色组成。
  3. 在您的信息模型中,您需要覆盖 equals() 和 hashcode() 函数,以便在 Article 类的 2 个实例具有相同的 3 个 ID、名称和城市时找到相等性。

现在,使用 JAXB 将 XML 文件读入 List<Article>它将包含源 XML 中的所有文章。

然后,创建一个 map 。然后迭代列表并将每个项目添加到 map ( map.put(article,article) )。如果 map 已包含该文章,您可以抓取它并更新其媒体部分。例如:map.get(currentArticle).getMedia.addAll(currentArticle.getMedia())

完成后,您可以将 Java 编码回 XML。

注意:使用 Map 而不是 Set 的原因是您需要能够检索对象并修改它,而在 Set 中则不能。

关于java - 如何对 XML 标签进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49222706/

25 4 0