Just starting out? Need help? Post your questions and find answers here.
thanos
Enthusiast
Posts: 423 Joined: Sat Jan 12, 2008 3:25 pm
Location: Greece
Contact:
Post
by thanos » 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.
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
Could someone help me to extract the list and ill the Details()?
Regards
» myPersonal Banker :: Because you do not need to have a master degree in economics in order to organize your finances!
infratec
Always Here
Posts: 7576 Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany
Post
by infratec » Thu Oct 13, 2022 9:22 pm
Very very difficult in PB.
If you look at the help of InsertXMLList() you will find that all members of the list needs the xml tag <element>
If you have any chance use JSON.
The structures are Ok, but you can not add List in front of the lists, else it fails:
Code: Select all
EnableExplicit
#XML = 0
#XML_TEXT = "<?xml version='1.0' encoding='utf-8'?>" + #LF$ +
"<RequestedDoc>" + #LF$ +
" <expensesClassificationsDoc>" + #LF$ +
" <ls:expensesInvoiceClassification>" + #LF$ +
" <ls:invoiceMark>600</ls:invoiceMark>" + #LF$ +
" <ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:lineNumber>1</ls:lineNumber>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>001</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>169.35</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>361</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>169.35</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" </ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:lineNumber>2</ls:lineNumber>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>001</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>47.90</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>361</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>47.90</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" </ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:lineNumber>3</ls:lineNumber>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>001</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>73.04</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>361</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>73.04</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" </ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:lineNumber>4</ls:lineNumber>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>001</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>58.67</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>361</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>58.67</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" </ls:invoicesExpensesClassificationDetails>" + #LF$ +
" </ls:expensesInvoiceClassification>" + #LF$ +
" <ls:expensesInvoiceClassification>" + #LF$ +
" <ls:invoiceMark>601</ls:invoiceMark>" + #LF$ +
" <ls:invoicesExpensesClassificationDetails>" + #LF$ +
" <ls:lineNumber>1</ls:lineNumber>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>001</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>511.29</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" <ls:expensesClassificationDetailData>" + #LF$ +
" <ls:classificationType>361</ls:classificationType>" + #LF$ +
" <ls:classificationCategory>1</ls:classificationCategory>" + #LF$ +
" <ls:amount>511.29</ls:amount>" + #LF$ +
" </ls:expensesClassificationDetailData>" + #LF$ +
" </ls:invoicesExpensesClassificationDetails>" + #LF$ +
" </ls:expensesInvoiceClassification>" + #LF$ +
" </expensesClassificationsDoc>" + #LF$ +
"</RequestedDoc>"
Structure expensesClassificationDetailData_Structure
classificationType.s
classificationCategory.s
amount.s
EndStructure
Structure invoicesExpensesClassificationDetails_Structure
lineNumber.s
expensesClassificationDetailData.expensesClassificationDetailData_Structure
EndStructure
Structure expensesInvoiceClassification_Structure
invoiceMark.s
invoicesExpensesClassificationDetails.invoicesExpensesClassificationDetails_Structure
EndStructure
Structure expensesClassificationsDoc_Structure
expensesInvoiceClassification.expensesInvoiceClassification_Structure
EndStructure
Structure RequestedDoc_Structure
expensesClassificationsDoc.expensesClassificationsDoc_Structure
EndStructure
Define sXML_Data.s
Define RequestedDoc.RequestedDoc_Structure
sXML_Data = RemoveString(#XML_TEXT, "ls:")
Debug sXML_Data
If ParseXML(#XML, sXML_Data)
If XMLStatus(#XML) = #PB_XML_Success
ExtractXMLStructure(MainXMLNode(#XML), @RequestedDoc, RequestedDoc_Structure)
Debug RequestedDoc\expensesClassificationsDoc\expensesInvoiceClassification\invoiceMark
Debug RequestedDoc\expensesClassificationsDoc\expensesInvoiceClassification\invoicesExpensesClassificationDetails\lineNumber
Debug RequestedDoc\expensesClassificationsDoc\expensesInvoiceClassification\invoicesExpensesClassificationDetails\expensesClassificationDetailData\amount
EndIf
EndIf
thanos
Enthusiast
Posts: 423 Joined: Sat Jan 12, 2008 3:25 pm
Location: Greece
Contact:
Post
by thanos » Thu Oct 13, 2022 10:47 pm
Thanks for your response
infratec wrote: Thu Oct 13, 2022 9:22 pm
Very very difficult in PB.
I see
If you look at the help of InsertXMLList() you will find that all members of the list needs the xml tag <element>
If you have any chance use JSON.
There is no chance, except if i wrote from scratch a xml2json converter in PB
The structures are Ok, but you can not add List in front of the lists, else it fails:
Any workaround idea?
» myPersonal Banker :: Because you do not need to have a master degree in economics in order to organize your finances!
StarBootics
Addict
Posts: 1006 Joined: Sun Jul 07, 2013 11:35 am
Location: Canada
Post
by StarBootics » Fri Oct 14, 2022 5:42 am
Hello thanos,
You have to do it the hard way like this :
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
List 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 Nodes2
Define i
Define *Struct
Define *SubStruct
Define *SubSubStruct
Define *SubSubSubStruct
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
*SubStruct = ChildXMLNode(*Struct)
While *SubStruct <> 0
Select GetXMLNodeName(*SubStruct)
Case "invoiceMark"
AddElement(Expenses())
Expenses()\invoiceMark = GetXMLNodeText(*SubStruct)
Case "invoicesExpensesClassificationDetails"
*SubSubStruct = ChildXMLNode(*SubStruct)
While *SubSubStruct <> 0
Select GetXMLNodeName(*SubSubStruct)
Case "lineNumber"
AddElement(Expenses()\invoicesExpensesClassificationDetails())
Expenses()\invoicesExpensesClassificationDetails()\lineNumber = GetXMLNodeText(*SubSubStruct)
Case "expensesClassificationDetailData"
*SubSubSubStruct = ChildXMLNode(*SubSubStruct)
AddElement(Expenses()\invoicesExpensesClassificationDetails()\ExpenseClassDetails())
While *SubSubSubStruct <> 0
Select GetXMLNodeName(*SubSubSubStruct)
Case "classificationType"
Expenses()\invoicesExpensesClassificationDetails()\ExpenseClassDetails()\classificationType = GetXMLNodeText(*SubSubSubStruct)
Case "classificationCategory"
Expenses()\invoicesExpensesClassificationDetails()\ExpenseClassDetails()\classificationCategory = GetXMLNodeText(*SubSubSubStruct)
Case "amount"
Expenses()\invoicesExpensesClassificationDetails()\ExpenseClassDetails()\amount = GetXMLNodeText(*SubSubSubStruct)
EndSelect
*SubSubSubStruct = NextXMLNode(*SubSubSubStruct)
Wend
EndSelect
*SubSubStruct = NextXMLNode(*SubSubStruct)
Wend
EndSelect
*SubStruct = NextXMLNode(*SubStruct)
Wend
EndIf
Next
EndSelect
*ChildNode = NextXMLNode(*ChildNode)
If (*ChildNode <> 0)
Debug GetXMLNodeName(*ChildNode)
Debug GetXMLNodeText(*ChildNode)
EndIf
Wend
EndIf
EndIf
ForEach Expenses()
Debug Expenses()\invoiceMark
ForEach Expenses()\invoicesExpensesClassificationDetails()
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
Next
Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
thanos
Enthusiast
Posts: 423 Joined: Sat Jan 12, 2008 3:25 pm
Location: Greece
Contact:
Post
by thanos » Fri Oct 14, 2022 7:37 am
StarBootics wrote: Fri Oct 14, 2022 5:42 am
Hello thanos,
You have to do it the hard way like this :
...
Best regards
StarBootics
It works, so it is perfect!
I tried with the same logic with you , but without success with the sublevels.
Thank you very much!
Best regards
Thanos
» myPersonal Banker :: Because you do not need to have a master degree in economics in order to organize your finances!