如何将动态XML中的嵌套标签转换为for循环?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将动态XML中的嵌套标签转换为for循环?相关的知识,希望对你有一定的参考价值。

我想将动态xml文件转换为特定的文件格式。我能够使用jsoup解析器解析xml,但问题是我想解析嵌套的标签并将其放入for-loop.Is有任何方法可以做到这一点。附上以下样本供参考

输入XML(示例)

                         <lineComponents>
                        <invoiceComponents>
                            <invoiceComponent>
                                <type></type>
                                <name></name>
                                <amount>16.00</amount>
                                <taxPercentage>0.00</taxPercentage>
                                <taxAmount>0E-8</taxAmount>
                            </invoiceComponent>
                        </invoiceComponents>
                        <acctComponents>
                            <acctComponent>
                                <componentCode>BASE</componentCode>
                                <glAccountNr></glAccountNr>
                                <baseAmount>10.00000</baseAmount>
                                <taxRate>0.00</taxRate>
                                <taxAmount>0.00000</taxAmount>
                                <totalAmount>10.00000</totalAmount>
                                <isVAT>No</isVAT>
                            </acctComponent>
                            <acctComponent>
                                <componentCode></componentCode>
                                <glAccountNr></glAccountNr>
                                <baseAmount>3.00000</baseAmount>
                                <taxRate>0.00</taxRate>
                                <taxAmount>0.00000</taxAmount>
                                <totalAmount>3.00000</totalAmount>
                                <isVAT>No</isVAT>
                            </acctComponent>
                            <acctComponent>
                                <componentCode>DISC</componentCode>
                                <glAccountNr></glAccountNr>
                                <baseAmount>-2.00000</baseAmount>
                                <taxRate>0.00</taxRate>
                                <taxAmount>0.00000</taxAmount>
                                <totalAmount>-2.00000</totalAmount>
                                <isVAT>No</isVAT>
                            </acctComponent>
                            <acctComponent>
                                <componentCode>ARPIT</componentCode>
                                <glAccountNr></glAccountNr>
                                <baseAmount>5.00000</baseAmount>
                                <taxRate>0.00</taxRate>
                                <taxAmount>0.00000</taxAmount>
                                <totalAmount>5.00000</totalAmount>
                                <isVAT>No</isVAT>
                            </acctComponent>
                        </acctComponents>
                    </lineComponents>

预期产量:

 for(OrderItem invoiceLineItem: orderLineWrp.invoiceLineItems){
            Dom.XMLNode invoiceComponentNode = invoiceComponentsNode.addChildElement(EP_OrderConstant.invoiceComponent,null,null);
            invoiceComponentNode.addChildElement(EP_OrderConstant.seqId,null,null).addTextNode(getValueforNode(invoiceLineItem.EP_SeqId__c));
            invoiceComponentNode.addChildElement(EP_OrderConstant.TYPE,null,null).addTextNode(getValueforNode(invoiceLineItem.EP_ChargeType__c));
            invoiceComponentNode.addChildElement(EP_OrderConstant.name,null,null).addTextNode(getValueforNode(invoiceLineItem.EP_Invoice_Name__c));
            invoiceComponentNode.addChildElement(EP_OrderConstant.amount,null,null).addTextNode(getValueforNode(invoiceLineItem.UnitPrice)); //Value for amount
            invoiceComponentNode.addChildElement(EP_OrderConstant.taxPercentage,null,null).addTextNode(getValueforNode(invoiceLineItem.EP_Tax_Percentage__c)); //Value for taxPercentage
            invoiceComponentNode.addChildElement(EP_OrderConstant.taxAmount,null,null).addTextNode(getValueforNode(invoiceLineItem.EP_Tax_Amount_XML__c)); //Value for taxAmount
        }

这个Xml文件是动态的。有没有办法将动态XML文件处理成上面的特定格式?

答案

Jsoup更适合html解析。

如果你有XML的XSD / DTD,你应该使用JAXB-generated classesunmarshaller来读取它。

否则你可以使用JAXP(DOMParser,如果文件很小,XPath,或基于事件的SAXParser(但这不是那么容易使用),对于非常大的XML文件)。

以上是关于如何将动态XML中的嵌套标签转换为for循环?的主要内容,如果未能解决你的问题,请参考以下文章

XML 到 JSON 的动态转换

您如何在方案中运行等效的嵌套 for 循环

循环通过 XML android/java

将带有嵌套标签的 XML 读入 Spark RDD,并转换为 JSON

如何使用迭代器嵌套循环?

将多级 for 循环转换为 linq 或 lambda 表达式