Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连接XML标记以成为数据帧列名_Python_Xml_Elementtree - Fatal编程技术网

Python 连接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>

我目前正在解析一个XML,并从中填充一个数据帧。假设我们有一个玩具XML:

<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行,以支持文本节点中的单引号。需要转义双引号。