Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中解析XML时遇到问题_Python_Xml_Xmlhttprequest - Fatal编程技术网

在python中解析XML时遇到问题

在python中解析XML时遇到问题,python,xml,xmlhttprequest,Python,Xml,Xmlhttprequest,我试图查询数据库,然后将它返回的类似文件的对象转换为XML文档。以下是我一直在做的事情: >>> import urllib, xml.dom.minidom >>> query = "http://sbol.bhi.washington.edu/openrdf-sesame/repositories/sbol_test?query=select%20distinct%20%3Fname%20%3Ffeaturename%20where%20%7B%3Fpar

我试图查询数据库,然后将它返回的类似文件的对象转换为XML文档。以下是我一直在做的事情:

>>> import urllib, xml.dom.minidom
>>> query = "http://sbol.bhi.washington.edu/openrdf-sesame/repositories/sbol_test?query=select%20distinct%20%3Fname%20%3Ffeaturename%20where%20%7B%3Fpart%20%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23annotation%3E%20%3Fannotation%3B%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23status%3E%20'Available'%3B%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23name%3E%20%3Fname.%3Fannotation%20%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23feature%3E%20%3Ffeature.%3Ffeature%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23type%3E%20%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23binding%3E%3B%3Chttp%3A%2F%2Fsbol.bhi.washington.edu%2Frdf%2Fsbol.owl%23name%3E%20%3Ffeaturename%7D"
>>> raw_result = urllib.urlopen(query)
>>> xml_result = xml.dom.minidom.parse(raw_result)
最后的命令给了我

xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 4 xml.parsers.expat.expat错误:格式不正确(无效令牌):第1行第4列 如果我使用xml.etree.ElementTree进行解析,几乎会发生同样的情况。我想他们都使用外籍人士。奇怪的是,如果我没有用python加载文件,而是将查询粘贴到Firefox中,那么可以使用open(path_to_file,“r”)很好地读入生成的文件

你知道这是什么吗

更新: 这是文件的第一行:

<?xml version='1.0' encoding='UTF-8'?> 


然而,这可能不是原始结果中的内容。。。这是下载query-result.srx并将扩展名更改为.txt后得到的结果。文件扩展名不重要,是吗?另外,我对xml这整件事还很陌生,为什么第4列是第8个字符Jeff 0秒前编辑

有没有可能发布XML片段?解析器指示错误发生在第一行。我的猜测是格式设置不正确或报告不正确,这导致EXPAT立即抛出异常


我猜第一行违反了“格式良好的XML”内容中的某些内容。作为参考,您可以将XML文件与第1行第4列的内容进行比较

我尝试过这个,但我得到的东西在我看来不像XML。以下是Alex建议的前八个字符:

>>> raw_result.read(8)
'BRTR\x00\x00\x00\x03'

您的服务器在决定返回的内容和格式时对accept头很挑剔。以下方面应起作用:

In [265]: import urllib2

In [266]: req = urllib2.Request(query, headers={'Accept':'application/xml'})

In [267]: rsp = urllib2.urlopen(req)

In [268]: xml = minidom.parse(rsp)

In [268]: xml.toxml()[:64]
Out[268]: u'<?xml version="1.0" ?><sparql xmlns="http://www.w3.org/2005/spar'
[265]中的
:导入urllib2
在[266]中:req=urllib2.Request(查询,标题={'Accept':'application/xml'})
在[267]中:rsp=urllib2.urlopen(req)
在[268]中:xml=minidom.parse(rsp)
在[268]中:xml.toxml()[:64]

Out[268]:u'RDF服务器似乎正在向您的urllib.urlopen调用传递纯文本

您应该能够设置正确的标题

Accept: application/sparql-results+xml, */*;q=0.5

,以获取xml响应。您必须阅读的RDF协议规范以了解详细信息-openRDF有多种格式。

为什么不显示该XML的前8个字符<代码>报告(原始结果[:8])
。所以你会在第4栏看到到底是什么困扰着它,dontchathink?-)