我试图用python从XML文件中检索一些信息。所有我想要的是设置一个熊猫数据框架与所有的PrdRef与NIR相关的信息标记匹配他的'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)