为pandas DataFrame制定Xpath的问题



我试图用python从XML文件中检索一些信息。所有我想要的是设置一个熊猫数据框架与所有的PrdRefNIR相关的信息标记匹配他的'Text()'

<Ressources xmlns="http://www.johndo.tr/brm">
...
<RessInd>
<CdRet>01</CdRet>
<NIR>456464644466</NIR>
<DTO>01011988</DTO>
<PrdRef>
<PrdRefTyp>M</PrdRefTyp>
<PrdRefVal>21M01</PrdRefVal>
...
</PrdRef>
</RessInd>
<RessInd>
... etc
</RessInd>
下面是我的代码:
import pandas as pd
df_prdref = pd.read_xml("to_parse.xml",xpath="//data:PrdRef/../data:RessInd/data:NIR[text()='456464644466']",namespaces={"data": "http://johndo.tr/brm"})
print(df_prdref )

不幸的是,无论我尝试什么,read_xml()总是返回错误或什么都没有。

在计算XPath时似乎没有考虑名称空间。一种选择是使用local-name()函数构建没有名称空间的XPath表达式。表达式会更长一点,但似乎可以工作:

import pandas as pd
df_prdref = pd.read_xml(xml, xpath="//*[local-name()='RessInd' and ./*[local-name()='NIR' and text()='456464644466']]/*[local-name()='PrdRef']")
print(df_prdref)

更正名称空间URI后,调整XPath以在所需节点之前运行带括号的条件:

df_prdref = pd.read_xml(
"to_parse.xml", 
xpath="//data:RessInd[data:NIR='456464644466']/data:PrdRef",
namespaces={"data": "http://www.johndo.tr/brm"}
)
print(df_prdref)

最新更新