我有一个需要解析的350MB XML文件。问题在于它是项目的集合。我将在下面发布完整的示例,但这就像:
<?xml blah blah>
<A>
<B1>
<details />
<subdetails />
<B2>
<details />
<subdetails /?
</A>
问题是我需要遍历所有B级详细信息并保留每个B1组中的所有内容。
尝试使用解析器lxml中内置的熊猫进行解析。对于非常小的XML文件,它运行缓慢且可以,但是对于我真正需要解析的350MB XML文件而言,它却不是那么好。我知道我可能需要etree才能做到这一点。但是,所有此类示例都无法让我在循环中保留足够的信息。这是我的示例XML文件,经过大量修改和简化。
<?xml>
<files>
<file_info>
<signature>asdf1234lkjh0987</signature>
<feed_timestamp>1547716688</feed_timestamp>
<xml_timestamp>1547719291</xml_timestamp>
</file_info>
<file>
<filename>windows.docx</filename>
<file_id>10001</file_id>
<cves>
<cve>CVE-2018-0123</cve>
<cve>CVE-2019-1357</cve>
</cves>
<bids>
<bid>111</bid>
</bids>
<xrefs>
<xref>ALPHA:ALPHA-ONE-SEVEN</xref>
</xrefs>
<preferences>
</preferences>
<attributes>
<attribute>
<name>cpe</name>
<value>cpe:/o:microsoft:etc</value>
</attribute>
<attribute>
<name>cvss_temporal_vector</name>
<value>CVSS2#E:F/RL:OF/RC:ND</value>
</attribute>
</attributes>
</file>
<file>
<filename>windows.xlsx</filename>
<file_id>10002</file_id>
<cves>
<cve>CVE-2018-4567</cve>
<cve>CVE-2019-9876</cve>
</cves>
<bids>
<bid>222</bid>
</bids>
<xrefs>
<xref>ALPHA:CHARLIE-THREE-CHARLIE</xref>
<xref>OP:BILLOWY BADGER
</xrefs>
<preferences>
</preferences>
<attributes>
<attribute>
<name>cpe</name>
<value>cpe:/o:microsoft:etc</value>
</attribute>
<attribute>
<name>cvss_temporal_vector</name>
<value>CVSS2#E:F/RL:OF/RC:ND</value>
</attribute>
</attributes>
</file>
</files>
我希望能够使用pandas to_excel函数输出包含几个不同表的Excel文件。 file_id是所有这些数据的唯一标识符/主键。
要导出的表格/表格示例:
File_ID | CVE
10001 | CVE-2018-0123
10001 | CVE-2019-1357
10002 | CVE-2018-4567
10002 | CVE-2019-9876
File_ID | ALPHA
10001 | ALPHA-ONE-SEVEN
10002 | CHARLIE-THREE-CHARLIE
属性是唯一的-每个属性条目一个名称和值标签。每个文件中有多个属性标签。下表将使用File_ID作为唯一键/主键,并列出了所有属于单个项目的内容。示例数据结构:
File_ID | Filename | CPE | CVSS_Temporal_Vector
10001 | windows.docx | cpe:/o:microsoft:etc | CVSS2#E:F/RL:OF/RC:ND
10002 | windows.xlsx | cpe:/o:microsoft:etc | CVSS2#E:F/RL:OF/RC:ND