Python 连接XML标记以成为数据帧列名
我目前正在解析一个XML,并从中填充一个数据帧。假设我们有一个玩具XML:Python 连接XML标记以成为数据帧列名,python,xml,elementtree,Python,Xml,Elementtree,我目前正在解析一个XML,并从中填充一个数据帧。假设我们有一个玩具XML: <A> <AA> <AAA1 period='march'>ONE</AAA1> <AAA2>TWO</AAA2> <AAA3>THREE</AAA3> <AAA4> <B semester='4'>FOUR</B>
<A>
<AA>
<AAA1 period='march'>ONE</AAA1>
<AAA2>TWO</AAA2>
<AAA3>THREE</AAA3>
<AAA4>
<B semester='4'>FOUR</B>
<C>FIVE</C>
<D>SIX</D>
</AAA4>
</AA>
</A>
我想得到的是:
三月份:{A.AA.AAA1.period-march:'ONE'},{A.AA.AAA2:'TWO'},{A.AA.AAA3:'THREE'},{A.AA.AAA4.B.学期-4:'FOUR'},{A.AA.AAA4.C:'FIVE'},{A.AA.AAA4.D:'SIX'},这将更容易处理
我已经解析了XML并将其转换为以下形式:[{'A:'empty'},{'AA':'empty'},{'AAA1':'ONE'},{'AAA2':'TWO'},{'AAA3':'THREE'},{'AAA4':'empty'},{'B':'FOUR'},{'C':'FIVE'},{'D':'SIX'},用'empty'填充父标记的值以标记它们,然后能够连接它们,如果它找到'empty'值,则保存要连接的键,依此类推
伙计们,我非常感谢你们的帮助。事先非常感谢 棘手的部分是找到您感兴趣的元素的路径。xslt的一种方法是使用对模板的递归调用 下面使用此方法组装字典的字符串版本,并将其交给python 以下是xslt部分dataframe.xsl: {' ': }&xa; . 要使用libxml的xsltproc实用程序测试xslt转换,请执行以下操作: xsltproc dataframe.xsl source.xml {'A.AA.AAA1.三月时期':'1'} {'A.AA.AAA2':'TWO'} {'A.AA.AAA3':'3'} {'A.AA.AAA4.B.学期-4':'4'} {'A.AA.AAA4.C':'5'} {'A.AA.AAA4.D':'SIX'} 将其全部放在python中,dataframe.py: !/usr/bin/env蟒蛇3 导入ast 从lxml导入etree 使用打开的“dataframe.xsl”作为样式表: transform=etree.XSLTetree.XMLstylesheet.read 使用开放的“source.xml”作为xml: dataframe\u str=strtransformetree.parsexml.rstrip'\n' dataframe_array=listmaplambda s:ast.literal_evals, 数据帧\u str.split'\n' printdataframe_数组 结果:
./dataframe.py
[{'A.AA.AAA1.period-march': 'ONE'}, {'A.AA.AAA2': 'TWO'}, {'A.AA.AAA3': 'THREE'}, {'A.AA.AAA4.B.semester-4': 'FOUR'}, {'A.AA.AAA4.C': 'FIVE'}, {'A.AA.AAA4.D': 'SIX'}]
有什么问题?请给我们看一下您的代码。B元素是否有输入错误?第四学期看起来应该是第四学期是的,我的错。这是一个打字错误。注意:我修正了我在B元素中看到的打字错误。非常感谢!它工作得很好。在对一些XML迭代了您的方法之后,现在我在这些XML中遇到了以下问题。我发现有些值里面有引号,比如L'amour,当我试图将它解析到字典时,它会生成一个错误,因为值里面只有一个引号。是否有一种方法可以最好在XML中的所有值中添加双引号,以避免错误,然后在生成DICT列表后删除这些双引号?@valware_xyz:请提出一个新问题。我已经更新了dataframe.xsl的第10、11和12行,以支持文本节点中的单引号。需要转义双引号。