这个python lxml库有什么问题

这个python lxml库有什么问题,python,lxml,Python,Lxml,我正在使用xpath读取一个xml文件,该文件返回null main.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

我正在使用xpath读取一个xml文件,该文件返回null

main.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)]
test.xml

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

3.14
42
11
XMLReader类是从本文收到的

编辑


如果您仍然存在问题,并且您使用
\uuuu init\uuuuuuuuuuuuuuuuuuupy
设置了一个模块,并且正在尝试导入xml\u util,那么请引用您的读取器
xml\u util.XMLReader
,或者将导入状态从util.xml\u util导入XMLReader更改为

编辑


如果您仍然存在问题,并且您使用
\uu init\uuuuuuuuuuuuuuuuuupy
设置了一个模块,并且正在尝试导入xml\u util,那么请参考您的读取器
xml\u util.XMLReader
,或者将您的导入状态从util.xml\u util导入XMLReader
更改为
,您的代码适合我。我把它放在一个名为
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
相同的目录中,我使用您提供的xml添加了
test.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。请尝试将
从util import xml_util
更改为
从xml_util import XMLReader

您的代码适合我。我把它放在一个名为
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
相同的目录中,我使用您提供的xml添加了
test.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。尝试将
从util import xml_util
更改为
从xml_util import XMLReader

显示的代码存在缩进问题和不正确的导入。你能解决这个问题吗?我创建了一个名为util的模块,xml_util.py有一个类XMLReader,所以我使用了类似于from util import xml_util的导入,这是错误的吗?@Kathick如果
XMLReader
xml_util
中定义了
,而你从util import xml_util
中定义了
,您不能像在
main
中那样直接调用
XMLReader
。它将导致一个
namererror
,并且将执行
except
子句。from util.xml\u util import XMLReader?是。此外,如果您希望有人阅读您的评论,请使用@username提及他们,他们会得到通知。您显示的代码存在缩进问题和不正确的导入。你能解决这个问题吗?我创建了一个名为util的模块,xml_util.py有一个类XMLReader,所以我使用了类似于from util import xml_util的导入,这是错误的吗?@Kathick如果
XMLReader
xml_util
中定义了
,而你从util import xml_util
中定义了
,您不能像在
main
中那样直接调用
XMLReader
。它将导致一个
namererror
,并且将执行
except
子句。from util.xml\u util import XMLReader?是。另外,如果你想让别人阅读你的评论,请用@username提及他们,他们会得到通知。你应该删除这个,因为这只是问题中代码的复制/粘贴。@Gromer,真的。。。再看一次。啊,你改变了导入。继续,先生@Kathick,如果代码johnthexii不适合你,你应该确保你的脚本能够访问xml文件。你应该删除它,因为它只是问题中代码的复制/粘贴。@Gromer,真的。。。再看一次。啊,你改变了导入。继续,先生@Kathick,如果代码johnthexii不适用于您,您应该确保您的脚本能够访问xml文件。