Python lxml XPath SyntaxError:谓词无效

珍妮

这是描述表单的 XML 文件的一部分:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHouse>
<XmlForm>
<houseNum>1</houseNum>
 <plan1> 
  <coord>
    <X> 1.2  </X>
    <Y> 2.1  </Y>
    <Z> 3.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
  </color>
 </plan1>
 <plan2>
  <coord>  
    <X> 21.2  </X>
    <Y> 22.1  </Y>
    <Z> 31.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
</color>
 </plan2> 
</XmlForm>


<XmlForm>
<houseNum>2</houseNum>
 <plan1> 
  <coord>
    <X> 11.2  </X>
    <Y> 12.1  </Y>
    <Z> 13.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 255   </G>
    <B> 0   </B>
  </color>
 </plan1>
 <plan2>
  <coord>  
    <X> 211.2  </X>
    <Y> 212.1  </Y>
    <Z> 311.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 255   </B>
</color>
 </plan2> 
</XmlForm>
</ArrayOfHouse>

这是我的代码,用于恢复房屋1和2的每个计划的坐标,问题出在这一行coord=tree.findall("XmlForm/[houseNum=str(houseindex)],使用时提出了同样的问题houseindex.__str__()

import pandas as pd
import numpy as np
from lxml import etree
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
tree =etree.parse("myexample.xml")
#recuperate the columns name for pandas dataframe
planlist=tree.findall("XmlForm/[houseNum='1']/")

columns=[]

for el in planlist[1:]:
    columns.append(el.tag)

#Declare pandas dataFrame
df=pd.DataFrame(columns=list('XYZ'),dtype=float)
for houseindex in range(0,2):
    for index in range(len(columns)):

        coord=tree.findall("XmlForm/[houseNum=str(houseindex)]/"+columns[index]+"/coord/")
        XYZ=[]
        for cc in coord:
            XYZ.append(cc.text)
        df.loc[index]=XYZ
print(df)
土星来自泰坦

您不会在字符串中注入“houseindex”。在你的 houseindex 循环中也要小心,因为你目前使用 range(0, 2) 对应于 0 和 1。根据你的 xml 示例,你宁愿使用 range(1, 3)。

我相信你想要这样的东西(我稍微重构了你的代码以提高可读性):

import pandas as pd
from lxml import etree

tree = etree.parse("myexample.xml")

# recuperate the columns name for pandas dataframe
plan_list = tree.findall("XmlForm/[houseNum='1']/")
columns = [el.tag for el in plan_list[1:]]

# Declare pandas dataFrame
data = list()
for house_index in range(1, 3):
    for column in columns:

        element_text = "XmlForm/[houseNum='{index}']/{column}/coord/".format(index=house_index, column=column)
        coord = tree.findall(element_text)
        row = [cc.text for cc in coord]
        data.append(row)

df = pd.DataFrame(data, columns=list('XYZ'), dtype=float)
print(df)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此xpath在python中使用lxml失败?

来自分类Dev

Python-表单的xpath语法(lxml.html)

来自分类Dev

lxml xpath的语法问题

来自分类Dev

合并xpath生成的列表,Python,lxml

来自分类Dev

Python:lxml xpath获得两个不同的类

来自分类Dev

Python使用lxml xpath从输入元素获取值

来自分类Dev

Python lxml的XPath在<p>标记中找不到<ul>

来自分类Dev

Python XPath SyntaxError:谓词无效

来自分类Dev

Python LXML.HMTL Xpath返回空列表

来自分类Dev

python lxml xpath没有输出

来自分类Dev

Python LXML xpath无法正常工作

来自分类Dev

Python Xpath:lxml.etree.XPathEvalError:无效的谓词

来自分类Dev

Python lxml.html xpath不返回任何元素

来自分类Dev

python lxml xpath无法解析撇号

来自分类Dev

通过LXML通过XPATH查找元素-Python

来自分类Dev

为什么python lxml etree xpath返回多个元素?

来自分类Dev

XPath SyntaxError:谓词无效

来自分类Dev

python lxml xpath:如何使此谓词起作用

来自分类Dev

Python,如何使用lxml XPath?

来自分类Dev

Python lxml.html xpath不返回任何元素

来自分类Dev

Python LXML HTML xpath查询代码不起作用

来自分类Dev

为什么此xpath在python中使用lxml失败?

来自分类Dev

python中在XML文件上使用lxml的xpath问题

来自分类Dev

在带有lxml和python 2.7的xpath中将unicode用作谓词

来自分类Dev

Python lxml的XPath在<p>标记中找不到<ul>

来自分类Dev

Python LXML.HMTL Xpath返回空列表

来自分类Dev

带有lxml的xpath用于Python获取数据

来自分类Dev

xpath 到 dic python、lxml 和 xml

来自分类Dev

在 Python 中使用 XPath 和 ETXPath 的 LXML