1

我正在使用 xpath 读取一个 xml 文件,它返回 null 的问题。

主要的.py

#!/usr/bin/python
import sys
from util import xml_util

def main():

    try:
        xml = XMLReader('test.xml')
        x = xml.getitem('numbers/x')
    print x
        return 0
    except:
        return -1


if __name__ == '__main__':
    sys.exit(main())

xml_util.py

from lxml import etree

class XMLReader:
    "Parse file and read data using find(path)"
    def __init__(self,fname):
        self.tree = etree.parse(fname)
        self.root = self.tree.getroot()

    def getitem(self,path,converter=str):
        return converter(self.root.find(path).text)

    def getlist(self,path,converter=str):
        return [converter(item.text) for item in self.root.find(path)]

测试.xml

<mystuff>
   <numbers>
        <x>3.14</x>
        <y>42</y>
        <z>11</z>
   </numbers>
</mystuff>

XMLReader 类是从这篇文章https://stackoverflow.com/questions/4357494/how-do-i-read-data-using-lxml-in-python

4

2 回答 2

1
#!/usr/bin/python
import sys
from xml_util import XMLReader

def main():

    try:
        xml = XMLReader('test.xml')
        x = xml.getitem('numbers/x')
    print x
        return 0
    except:
        return -1


if __name__ == '__main__':
    sys.exit(main())

编辑

如果您仍然遇到问题并且您设置了一个模块__init__.py并尝试导入 xml_util 然后参考您的阅读器xml_util.XMLReader或将您的导入语句更改为from util.xml_util import XMLReader

于 2012-10-19T18:00:28.000 回答
0

你的代码对我有用。我把它放在一个名为的文件中main.py

#!/usr/bin/python
import sys
from lxml import etree

def main():

    try:
        xml = XMLReader('test.xml')
        x = xml.getitem('numbers/x')
        print x
        return 0
    except:
        return -1

class XMLReader:
    "Parse file and read data using find(path)"
    def __init__(self,fname):
        self.tree = etree.parse(fname)
        self.root = self.tree.getroot()

    def getitem(self,path,converter=str):
        return converter(self.root.find(path).text)

    def getlist(self,path,converter=str):
        return [converter(item.text) for item in self.root.find(path)]

在与相同的目录中main.py,我添加test.xml了您提供的 XML。

壳:

$ ipython                                                                                                                          
Python 2.6.6 (r266:84292, Aug 28 2012, 10:55:56)                                                                                              

In [1]: from main import main                                                                                                                                           

In [2]: main()                                                                                                                                                            
3.14                                                                                                                                                                    
Out[2]: 0                                                                                                                                                               

In [3]:  

看起来您没有test.xml脚本在哪里寻找它。

正如其他人指出的那样,您在问题中提出的代码中存在缩进问题。粘贴代码后,我认为这是格式问题。我在其中添加了选项卡print x

此外,可能是您import必须导入 XMLReader 的声明。尝试更改from util import xml_utilfrom xml_util import XMLReader.

于 2012-10-19T18:05:03.737 回答