Extract list from XML
Posted: Thu Oct 13, 2022 8:16 pm
Hello.
I took correctly the structure of <expensesInvoiceClassification> but i can't extract the list from the <invoicesExpensesClassificationDetails> key.
Could someone help me to extract the list and ill the Details()?
Regards
I took correctly the structure of <expensesInvoiceClassification> but i can't extract the list from the <invoicesExpensesClassificationDetails> key.
Code: Select all
EnableExplicit
#XML = 0
#XML_TEXT = "<?xml version='1.0' encoding='utf-8'?>" +
"<RequestedDoc>" +
" <expensesClassificationsDoc>" +
" <ls:expensesInvoiceClassification>" +
" <ls:invoiceMark>600</ls:invoiceMark>" +
" <ls:invoicesExpensesClassificationDetails>" +
" <ls:lineNumber>1</ls:lineNumber>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>001</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>169.35</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>361</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>169.35</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" </ls:invoicesExpensesClassificationDetails>" +
" <ls:invoicesExpensesClassificationDetails>" +
" <ls:lineNumber>2</ls:lineNumber>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>001</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>47.90</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>361</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>47.90</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" </ls:invoicesExpensesClassificationDetails>" +
" <ls:invoicesExpensesClassificationDetails>" +
" <ls:lineNumber>3</ls:lineNumber>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>001</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>73.04</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>361</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>73.04</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" </ls:invoicesExpensesClassificationDetails>" +
" <ls:invoicesExpensesClassificationDetails>" +
" <ls:lineNumber>4</ls:lineNumber>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>001</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>58.67</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>361</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>58.67</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" </ls:invoicesExpensesClassificationDetails>" +
" </ls:expensesInvoiceClassification>" +
" <ls:expensesInvoiceClassification>" +
" <ls:invoiceMark>601</ls:invoiceMark>" +
" <ls:invoicesExpensesClassificationDetails>" +
" <ls:lineNumber>1</ls:lineNumber>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>001</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>511.29</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" <ls:expensesClassificationDetailData>" +
" <ls:classificationType>361</ls:classificationType>" +
" <ls:classificationCategory>1</ls:classificationCategory>" +
" <ls:amount>511.29</ls:amount>" +
" </ls:expensesClassificationDetailData>" +
" </ls:invoicesExpensesClassificationDetails>" +
" </ls:expensesInvoiceClassification>" +
" </expensesClassificationsDoc>" +
"</RequestedDoc>"
Structure expensesClassificationDetailData
classificationType.s
classificationCategory.s
amount.s
EndStructure
Structure invoicesExpensesClassificationDetails
lineNumber.s
List ExpenseClassDetails.expensesClassificationDetailData()
EndStructure
Structure expensesClassificationsDoc
invoiceMark.s
invoicesExpensesClassificationDetails.invoicesExpensesClassificationDetails
EndStructure
Define NewList Expenses.expensesClassificationsDoc()
Define NewList Details.expensesClassificationDetailData()
Define Expense.expensesClassificationsDoc
Define NodeText.s
Define sXML_Data.s
Define *MainNode
Define *ChildNode
Define Nodes
Define i
Define *Struct
sXML_Data = ReplaceString(#XML_TEXT, "ls:", "")
If ParseXML(#XML, sXML_Data)
If XMLStatus(#XML) = #PB_XML_Success
*MainNode = MainXMLNode(#XML)
*ChildNode = ChildXMLNode(*MainNode)
While *ChildNode <> 0
NodeText = GetXMLNodeName(*ChildNode)
Select NodeText
Case "expensesClassificationsDoc"
Nodes = XMLChildCount(*ChildNode)
For i = 1 To Nodes
*Struct = ChildXMLNode(*ChildNode, i)
If *Struct
;= Extract structure of the expense
ExtractXMLStructure(*Struct, @Expense, expensesClassificationsDoc)
;=============>Trying to extract the list
ExtractXMLList(*Struct, Details()) ;<======== Nothing
AddElement(Expenses())
Expenses() = Expense
EndIf
Next
EndSelect
*ChildNode = NextXMLNode(*ChildNode)
If (*ChildNode <> 0)
Debug GetXMLNodeName(*ChildNode)
Debug GetXMLNodeText(*ChildNode)
EndIf
Wend
EndIf
EndIf
ForEach Expenses()
Debug Expenses()\invoiceMark
Debug Expenses()\invoicesExpensesClassificationDetails\lineNumber
ForEach Expenses()\invoicesExpensesClassificationDetails\ExpenseClassDetails()
Debug Expenses()\invoicesExpensesClassificationDetails\ExpenseClassDetails()\classificationType
Debug Expenses()\invoicesExpensesClassificationDetails\ExpenseClassDetails()\classificationCategory
Debug Expenses()\invoicesExpensesClassificationDetails\ExpenseClassDetails()\amount
Next
Next
Regards