Как преобразовать вложенные теги в динамическом XML в цикл for? - PullRequest
0 голосов
/ 30 августа 2018

Я хочу конвертировать динамический XML-файл в определенный формат файла. Я мог бы проанализировать XML с помощью парсера jsoup, но проблема в том, что я хочу проанализировать вложенные теги и поместить их в for-loop. Есть ли способ сделать это. Прикрепление образца ниже для справки

Входной 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-файла в определенном формате, как указано выше?

1 Ответ

0 голосов
/ 30 августа 2018

Jsoup скорее для разбора HTML.

Если у вас есть XSD / DTD для вашего XML, вы должны использовать сгенерированные JAXB классы и демаршаллер для его чтения.

В противном случае вы можете использовать JAXP (DOMParser, если файл небольшой, и XPath или на основе событий SAXParser (однако это не так просто использовать) для действительно больших файлов XML).

...