Problem is parsing through an xml that starts right after <Envelope>
from bs4 import BeautifulSoup
Filename =input("Enter File name to be imported :" )
imp_ext = ".xml"
imp_file = ("".join([Filename,imp_ext]))
#it is in UTF-16BE format
with open(imp_file, encoding= 'UTF-16') as fp:
soup = BeautifulSoup(fp, 'xml')
Soup has this data:
<?xml version="1.0" encoding="UTF-8"?>
<ENVELOPE>
<DSPACCNAME>
<DSPDISPNAME>206375</DSPDISPNAME>
</DSPACCNAME>
<DSPSTKINFO>
<DSPSTKOUT>
<DSPOUTQTY>1 EA</DSPOUTQTY>
<DSPOUTRATE>715.00</DSPOUTRATE>
<DSPNETTCRAMTA>715.00</DSPNETTCRAMTA>
<DSPCRAMTA>715.00</DSPCRAMTA>
<DSPCONSAMT>-358.62</DSPCONSAMT>
<DSPGPAMT>356.38</DSPGPAMT>
<DSPGPPERC>49.84 %</DSPGPPERC>
</DSPSTKOUT>
<DSPSTKCL>
<DSPCLQTY>3 EA</DSPCLQTY>
<DSPCLRATE>358.62</DSPCLRATE>
<DSPCLAMTA>-1075.87</DSPCLAMTA>
</DSPSTKCL>
</DSPSTKINFO>
<SSBATCHNAME>
<SSBATCH />
<SSGODOWN>Ware -House (Mankoli-Bhiwandi)</SSGODOWN>
</SSBATCHNAME>
<DSPSTKINFO>
<DSPSTKOUT>
<DSPOUTQTY>1 EA</DSPOUTQTY>
<DSPOUTRATE>715.00</DSPOUTRATE>
<DSPNETTCRAMTA>715.00</DSPNETTCRAMTA>
<DSPCRAMTA>715.00</DSPCRAMTA>
<DSPCONSAMT>-358.62</DSPCONSAMT>
<DSPGPAMT>356.38</DSPGPAMT>
<DSPGPPERC>49.84 %</DSPGPPERC>
</DSPSTKOUT>
<DSPSTKCL>
<DSPCLQTY>3 EA</DSPCLQTY>
<DSPCLRATE>358.62</DSPCLRATE>
<DSPCLAMTA>-1075.87</DSPCLAMTA>
</DSPSTKCL>
</DSPSTKINFO>
</ENVELOPE>
then I am trying to extract data from xml file I also tried:
for a in soup.findAll('DSPACCNAME'):
for b in soup.findAll('DSPSTKINFO'):
print(a.DSPDISPNAME)
print(b.DSPCLQTY)
print(b.DSPCLRATE)
print(b.DSPCLAMTA)
I am getting output that is something like this:
206375
1 EA
715.00
715.00
715.00
-358.62
356.38
49.84 %
Issue is I don't have a parent class that creates a boundary. I am trying to extract the data in CSV format. Data comes from tally. It is called stock summary to be exact. I have no idea how to proceed. Data comes with empty values as well. And that needs to be captured as it is.
edit* : I am purposefully putting a part of xml that has all the data needed to be extracted (row 13 of image is the expected output). Output needs to be something that has all these values, with lowest level granularity(Every thing in 1 row) please have a look at this image for reference:
