2014-09-30 315 views
0

我尝试使用lxml解析XML文件。它与一些文件,但最后一个给了我一个错误:Python lxml/XPathEvalError:解析xml文件时出现无效表达式

XPathEvalError at /admin/xml_exportation/xml/add/ 
Invalid expression 

下面是XML代码:

<?xml version="1.0" encoding="utf-8" ?> 
<export source="Source" version="1.0" date="2014-02-21T17:46:57"> 
    <Agence ID="XX1" externRef="XX1" customCode="38495"> 
    <Biens> 
     <Bien ID="XX1-176" ref="XX1-176"> 
     <DateMAJ>2013-06-14T12:12:07</DateMAJ> 
     </Bien> 
    </Biens> 
    </Agence> 
</export> 

然后是Python代码:

tree = etree.parse(xml_file) 
root_path = '/export/Agence/Biens/Bien/' 
for element in tree.xpath(root_path): 
    print(element) 

我试着改变路径,但它给了我同样的错误。

谢谢您的帮助。

编辑

Internal Server Error: /admin/xml_exportation/xml/add/ 
Traceback (most recent call last): 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/contrib/admin/options.py", line 372, in wrapper 
    return self.admin_site.admin_view(view)(*args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/views/decorators/cache.py", line 89, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 202, in inner 
    return view(request, *args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper 
    return bound_func(*args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func 
    return func(self, *args2, **kwargs2) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/db/transaction.py", line 223, in inner 
    return func(*args, **kwargs) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/contrib/admin/options.py", line 1007, in add_view 
    self.save_model(request, new_object, form, False) 
    File "/home/python-envs/website.com/local/lib/python2.7/site-packages/django/contrib/admin/options.py", line 740, in save_model 
    obj.save() 
    File "astucesexperts/apps/xml_exportation/models.py", line 154, in save 
    for element in tree.xpath(root_path): # Find each new property 
    File "lxml.etree.pyx", line 2115, in lxml.etree._ElementTree.xpath (src/lxml/lxml.etree.c:57669) 
    File "xpath.pxi", line 370, in lxml.etree.XPathDocumentEvaluator.__call__ (src/lxml/lxml.etree.c:146579) 
    File "xpath.pxi", line 238, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:144977) 
    File "xpath.pxi", line 224, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src/lxml/lxml.etree.c:144832) 
XPathEvalError: Invalid expression 

我也从一个XML文件,我可以用脚本(更改根路径)导出添加代码。

<?xml version='1.0' encoding='UTF-8' ?> 
<ANNONCES> 
    <ANNONCE> 
     <AGENCE_REF><![CDATA[22]]></AGENCE_REF> 
     <AGENCE_NOM><![CDATA[Agence]]></AGENCE_NOM> 
<REFERENCE><![CDATA[100lm]]></REFERENCE> 
     <TRANSACTION><![CDATA[2]]></TRANSACTION> 
     <TYPE><![CDATA[2]]></TYPE> 
     <SOUSTYPE><![CDATA[45]]></SOUSTYPE> 
     <SURFACE><![CDATA[100]]></SURFACE> 
    <ANNONCE> 
</ANNONCES> 
+0

这是有帮助的,包括回溯,所以我们知道哪一行导致了问题。 – tdelaney 2014-09-30 19:59:53

+0

错误意味着xpath表达式'/ admin/xml_exportation/xml/add /'不好 - 尾随的'/'是非法的。我认为代码崩溃在与您展示的地点不同的地方。 – tdelaney 2014-09-30 20:10:15

+0

我用这个代码与另一个xml文件,它的工作。这就是为什么我认为崩溃来自xml和python。 – pepourquier 2014-10-01 05:03:04

回答

1

您的XPath具有尾随的'/'。删除它,一切按预期工作。

也就是说,变化:

root_path = '/export/Agence/Biens/Bien/' 

root_path = '/export/Agence/Biens/Bien' 
0

<Biens>你关闭标签没有反斜杠,所以你的树是空的,因为XML没有解析。

在尝试使用Python解析它之前验证您的XML。

+0

写这个问题可能只是一个错误。一个不匹配的标签会抛出一个XMLSyntaxError。 – tdelaney 2014-09-30 20:04:35

+0

感谢您的意见。是的,我写这个问题只是一个错误。 – pepourquier 2014-10-01 04:50:12