在java中迭代巨大的xml

时间:2018-03-13 09:40:00

标签: java xml refactoring

我正在尝试读取和迭代巨大的xml的信息并尝试转换为json并将其发送到前端。响应XML中有许多子元素和子子元素。我想迭代一个孩子的值" Node"及其子节点并转换为JSON并将其发送到前端以将其转换为excel。目前,我可以通过使用嵌套的for循环来实现这一点。然而,随着子子数的增加,for循环也增加。

for(X s:a){
  for(A a: B){
     for(B b:C){
 } 
}
}

还有其他方法可以编写更干净的代码吗?

3 个答案:

答案 0 :(得分:0)

您可以使用递归。伪代码:

void getAllChildren(StackOfChildren stack, Node node) {
   if(node.hasChildNode)
      getAllChildren(stack, node); 

   stack.add(node);
}

答案 1 :(得分:0)

如果你知道你的根元素,那么从它开始并检查它的子元素是否存在,如果存在则迭代它.Below可能是你读取XML文件的算法。

Query Result 
[ 
  { paymentGateway: 'Paystack', count: '3966' },
  { paymentGateway: 'PAGA', count: '3954' },
  { paymentGateway: 'Flutterwave', count: '3995' },
  { paymentGateway: 'Interswitch', count: '4118' },
  { paymentGateway: 'NIBSS', count: '3968' } 
]

您可以递归调用每个元素来获取其子元素,不需要内部for或while循环。

答案 2 :(得分:0)

也许这并没有使用正确的工具。

您是否尝试过使用XSLT?这允许通过声明转换规则将XML转换为其他任何内容。 但是,它依赖于DOM(文档对象模型)并将整个文件加载到内存中。

或者,您可以使用SAX(XML的简单API),它不会立即加载整个文档。

其他替代方案也存在,比如StAX,我认为这种方式更有效。