【发布时间】:2022-01-22 23:18:00
【问题描述】:
问题是通过在 <Envelope> 之后开始的 xml 进行解析
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')
汤有这个数据:
<?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>
然后我正在尝试从 xml 文件中提取数据 我也试过了:
for a in soup.findAll('DSPACCNAME'):
for b in soup.findAll('DSPSTKINFO'):
print(a.DSPDISPNAME)
print(b.DSPCLQTY)
print(b.DSPCLRATE)
print(b.DSPCLAMTA)
我得到的输出是这样的:
206375
1 个 EA
715.00
715.00
715.00
-358.62
356.38
49.84%
问题是我没有创建边界的父类。我正在尝试以 CSV 格式提取数据。数据来自计数。确切地说,它被称为股票摘要。我不知道如何进行。数据也带有空值。这需要照原样捕捉。
edit* :我有意放置 xml 的一部分,其中包含需要提取的所有数据(图像的第 13 行是预期的输出)。输出需要具有所有这些值,具有最低级别的粒度(1 行中的每件事)请查看此图像以供参考:
【问题讨论】:
-
根据您发布的 xml - 预期的输出是什么?
-
好吧,尽管它说的是 UTF-8,但是,有时会有 BOM 导致 python 给出空的“汤”
标签: python xml csv beautifulsoup