**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。它目前不接受回答。
我们不允许问题寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答问题。
上个月关门了。
Improve this question
我有一个这样的输入:
<root>
<results>
<loc>Loc 10</loc>
<loc_name>Loc Desc10</loc_name>
<points>3</points>
<StartDate>2023-09-11T22:39:40Z</StartDate>
<EndDate>2023-09-13T22:45:36.437000Z</EndDate>
</results>
<results>
<loc>Loc 11</loc>
<loc_name>Loc Desc 11</loc_name>
<points>4</points>
<StartDate>2023-09-16T22:39:40Z</StartDate>
<EndDate>2023-09-18T22:45:36.437000Z</EndDate>
</results>
</root>
我想为开始和结束日期之间的每一天复制数据。我们需要一个类似于以下的输出:
<root>
<results>
<loc>Loc 10</loc>
<loc_name>Loc Desc10</loc_name>
<points>3</points>
<Date>2023-09-11T22:39:40Z</Date>
</results>
<results>
<loc>Loc 10</loc>
<loc_name>Loc Desc10</loc_name>
<points>3</points>
<Date>2023-09-12T22:39:40Z</Date>
</results>
<results>
<loc>Loc 10</loc>
<loc_name>Loc Desc10</loc_name>
<points>3</points>
<Date>2023-09-13T22:39:40Z</Date>
</results>
<results>
<loc>Loc 11</loc>
<loc_name>Loc Desc11</loc_name>
<point>4</points>
<Date>2023-09-16T22:39:40Z</Date>
</results>
<results>
<loc>Loc 11</loc>
<loc_name>Loc Desc11</loc_name>
<point>4</points>
<Date>2023-09-17T22:39:40Z</Date>
</results>
<results>
<loc>Loc 11</loc>
<loc_name>Loc Desc11</loc_name>
<point>4</points>
<Date>2023-09-18T22:39:40Z</Date>
</results>
</root>
我们如何在Groovy中做到这一点?
我无法找到任何关于如何在Groovy中循环负载并创建新负载的示例
1条答案
按热度按时间q7solyqu1#
下面是一个快速脚本,它可以实现您正在寻找的功能:
我注意到了一些事情,应该解释一下。
StartDate
节点和EndDate
节点具有不同的日期格式。感觉很奇怪。如果您控制这个XML的生成,您可能需要清理它。诀窍在于
parseText
返回一个GPathResult
,它允许你跨xml节点执行查询(比如xml.results.each
跨根元素下的节点执行查询)。你还可以访问groovy的集合方法(如findAll
,collect
,each
等)。因此,用于将节点从输入文档复制到输出的循环使用findAll
来过滤所有不是StartDate
或EndDate
的节点,使用each
进行迭代。