给我的XML输出如下所示:
<lsar030><head></head><body><group1></group1><Part></part><national_stock_number_cross_reference>
<federal_supply_classification>5310</federal_supply_classification>
<national_item_identification_number>008805978</national_item_identification_number>
<figure_number>700</figure_number>
<item_number>34</item_number>
</national_stock_number_cross_reference>
<national_stock_number_cross_reference>
<federal_supply_classification>5310</federal_supply_classification>
<national_item_identification_number>008805978</national_item_identification_number>
<figure_number>701</figure_number>
<item_number>10</item_number>
</national_stock_number_cross_reference>
<national_stock_number_cross_reference>
<federal_supply_classification>5310</federal_supply_classification>
<national_item_identification_number>008805978</national_item_identification_number>
<figure_number>703</figure_number>
<item_number>9</item_number>
</national_stock_number_cross_reference></body></lsar030>
我用xml.etree.cElementTree
编写了一个基本代码来组织数据并删除重复的<federal_supply_classification>
和{
我的输出结果如下:
<nsnindxrow>
<nsn>
<fsc>5310</fsc>
<niin>00-880-5978</niin>
</nsn>
<callout assocfig="fig700" label="34">
</nsnindxrow>
<nsnindxrow>
<nsn>
<fsc></fsc>
<niin></niin>
</nsn>
<callout assocfig="fig701" label="10">
</nsnindxrow>
<nsnindxrow>
<nsn>
<fsc></fsc>
<niin></niin>
</nsn>
<callout assocfig="fig703" label="9">
</nsnindxrow>
当我需要以这样的输出结束时。在
<nsnindxrow>
<nsn>
<fsc>5310</fsc>
<niin>00-880-5978</niin>
</nsn>
<callout assocfig="fig700" label="34">
<callout assocfig="fig701" label="10">
<callout assocfig="fig703" label="9">
</nsnindxrow>
有没有一种简单的方法可以将find和remove添加到代码中,还是需要调整循环语句?怎么办?在
请原谅我建议另一种方法,但请考虑使用XSLT解决方案,因为您需要的是典型的Muenchian Method,涉及对}配对进行分组。{Stylesheet}是一种特殊的XML文档格式,专门用来转换XML文档。在
<federal_supply_classification>
和{Python的lxml模块可以运行XSLT1.0脚本,也可以在命令行调用外部处理器,如Saxon/Xalan或PowerShell/Bash。在这种方法中,您可以避免任何通用循环或条件逻辑,甚至避免元素的字符串连接。最后,XSLT是一个格式良好的XML文件,因此可以像任何其他XML文档一样从文件或字符串中解析。在
下面的示例将您发布的XML示例包装在根标记中:
<root>...</root>
。将XSLT的第一个模板中的root改为实际的XML根。在XSLT脚本(另存为.xsl,将在下面引用)
Python脚本
^{pr2}$输出
每次循环
national_stock_number_cross_reference
项(第三个for
循环)时,都会创建一个新的<nsnindxrow>
标记:第一次通过
for
循环时,它创建了<nsn>
标记,因为repeat
为false。然后repeat
被切换到true
,因此它在下次通过时放置一个空标记。它对您拥有的所有不同的federal_supply_classification
项都这样做,在本例中是3。在您需要在这个循环之前移动
<nsn>
标记创建过程,以避免每次都重新创建它。在相关问题 更多 >
编程相关推荐