python的xpath问题
elementtree非常新,所以我尝试解析xbmc电视插件的xml文件。下面是我遇到问题的代码。我认为我的xpath不正确,占位符对属性无效 这是我正在处理的xml文件- SyntaxError:expected path separator([)是我根据以下公式得到的: 此模块为的XPath表达式提供有限的支持 在树中定位元素。目标是支持 缩写语法;完整的XPath引擎不在 模块 您可能需要像使用XPath这样的第三方库 例如:python的xpath问题,python,xml,xpath,xbmc,Python,Xml,Xpath,Xbmc,elementtree非常新,所以我尝试解析xbmc电视插件的xml文件。下面是我遇到问题的代码。我认为我的xpath不正确,占位符对属性无效 这是我正在处理的xml文件- SyntaxError:expected path separator([)是我根据以下公式得到的: 此模块为的XPath表达式提供有限的支持 在树中定位元素。目标是支持 缩写语法;完整的XPath引擎不在 模块 您可能需要像使用XPath这样的第三方库 例如: >>> import lxml.etree
>>> import lxml.etree
>>>
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> tree = lxml.etree.parse()
>>> tree.xpath("/Show/Episodelist/Season[@no='%s']/episode/seasonnum/text()" % 1)
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
更新
要使用lxml.etree.ElementTree
,应稍微修改xpath:
>>> import urllib
>>> import xml.etree.ElementTree as ET
>>>
>>> f = urllib.urlopen(url)
>>> tree = ET.parse(f)
>>> [e.text for e in tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % 1)]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
根据:
此模块为的XPath表达式提供有限的支持
在树中定位元素。目标是支持
缩写语法;完整的XPath引擎不在
模块
您可能需要像使用XPath这样的第三方库
例如:
>>> import lxml.etree
>>>
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> tree = lxml.etree.parse()
>>> tree.xpath("/Show/Episodelist/Season[@no='%s']/episode/seasonnum/text()" % 1)
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
更新
要使用lxml.etree.ElementTree
,应稍微修改xpath:
>>> import urllib
>>> import xml.etree.ElementTree as ET
>>>
>>> f = urllib.urlopen(url)
>>> tree = ET.parse(f)
>>> [e.text for e in tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % 1)]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
根据:
此模块为的XPath表达式提供有限的支持
在树中定位元素。目标是支持
缩写语法;完整的XPath引擎不在
模块
您可能需要像使用XPath这样的第三方库
例如:
>>> import lxml.etree
>>>
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> tree = lxml.etree.parse()
>>> tree.xpath("/Show/Episodelist/Season[@no='%s']/episode/seasonnum/text()" % 1)
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
更新
要使用lxml.etree.ElementTree
,应稍微修改xpath:
>>> import urllib
>>> import xml.etree.ElementTree as ET
>>>
>>> f = urllib.urlopen(url)
>>> tree = ET.parse(f)
>>> [e.text for e in tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % 1)]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
根据:
此模块为的XPath表达式提供有限的支持
在树中定位元素。目标是支持
缩写语法;完整的XPath引擎不在
模块
您可能需要像使用XPath这样的第三方库
例如:
>>> import lxml.etree
>>>
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> tree = lxml.etree.parse()
>>> tree.xpath("/Show/Episodelist/Season[@no='%s']/episode/seasonnum/text()" % 1)
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
更新
要使用lxml.etree.ElementTree
,应稍微修改xpath:
>>> import urllib
>>> import xml.etree.ElementTree as ET
>>>
>>> f = urllib.urlopen(url)
>>> tree = ET.parse(f)
>>> [e.text for e in tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % 1)]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
使用ElementTree:
>>> from xml.etree import ElementTree
>>> import urllib2
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> request = urllib2.Request(url, headers={"Accept" : "application/xml"})
>>> u = urllib2.urlopen(request)
>>> tree = ElementTree.parse(u)
>>> rootElem = tree.getroot()
>>> [s.text for s in rootElem.findall('.//Season[@no="2"]/episode/seasonnum')]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14',
'15', '16', '17', '18', '19', '20', '21', '22']
使用ElementTree:
>>> from xml.etree import ElementTree
>>> import urllib2
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> request = urllib2.Request(url, headers={"Accept" : "application/xml"})
>>> u = urllib2.urlopen(request)
>>> tree = ElementTree.parse(u)
>>> rootElem = tree.getroot()
>>> [s.text for s in rootElem.findall('.//Season[@no="2"]/episode/seasonnum')]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14',
'15', '16', '17', '18', '19', '20', '21', '22']
使用ElementTree:
>>> from xml.etree import ElementTree
>>> import urllib2
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> request = urllib2.Request(url, headers={"Accept" : "application/xml"})
>>> u = urllib2.urlopen(request)
>>> tree = ElementTree.parse(u)
>>> rootElem = tree.getroot()
>>> [s.text for s in rootElem.findall('.//Season[@no="2"]/episode/seasonnum')]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14',
'15', '16', '17', '18', '19', '20', '21', '22']
使用ElementTree:
>>> from xml.etree import ElementTree
>>> import urllib2
>>> url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
>>> request = urllib2.Request(url, headers={"Accept" : "application/xml"})
>>> u = urllib2.urlopen(request)
>>> tree = ElementTree.parse(u)
>>> rootElem = tree.getroot()
>>> [s.text for s in rootElem.findall('.//Season[@no="2"]/episode/seasonnum')]
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14',
'15', '16', '17', '18', '19', '20', '21', '22']
我试过你的例子,它很有效。下面是一个浓缩的完整版本:
import urllib
import xml.etree.ElementTree as ET
url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
tree = ET.parse(urllib.urlopen(url))
seasons = tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % '1')
for s in seasons:
print s.text
我能想到的唯一问题是,不知何故,您下载了一个部分XML文档——不太可能,但我不知道任何其他解释。请注意,上面的脚本取自您的问题。我只为循环添加了
。我尝试了您的示例,效果很好。下面是一个精简的完整版本:
import urllib
import xml.etree.ElementTree as ET
url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
tree = ET.parse(urllib.urlopen(url))
seasons = tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % '1')
for s in seasons:
print s.text
import xml.etree.ElementTree as ET
import urllib
content = urllib.urlopen(url).read()
tree2 = ET.fromstring(content)
tvrage_seasons = tree2.findall('.//Season' )
我能想到的唯一问题是,不知何故,您下载了一个部分XML文档——不太可能,但我不知道任何其他解释。请注意,上面的脚本取自您的问题。我只为
循环添加了。我尝试了您的示例,效果很好。下面是一个精简的完整版本:
import urllib
import xml.etree.ElementTree as ET
url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
tree = ET.parse(urllib.urlopen(url))
seasons = tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % '1')
for s in seasons:
print s.text
import xml.etree.ElementTree as ET
import urllib
content = urllib.urlopen(url).read()
tree2 = ET.fromstring(content)
tvrage_seasons = tree2.findall('.//Season' )
我能想到的唯一问题是,不知何故,您下载了一个部分XML文档——不太可能,但我不知道任何其他解释。请注意,上面的脚本取自您的问题。我只为
循环添加了。我尝试了您的示例,效果很好。下面是一个精简的完整版本:
import urllib
import xml.etree.ElementTree as ET
url = 'http://services.tvrage.com/myfeeds/episode_list.php?key=ag6txjP0RH4m0c8sZk2j&sid=2930'
tree = ET.parse(urllib.urlopen(url))
seasons = tree.findall("./Episodelist/Season[@no='%s']/episode/seasonnum" % '1')
for s in seasons:
print s.text
import xml.etree.ElementTree as ET
import urllib
content = urllib.urlopen(url).read()
tree2 = ET.fromstring(content)
tvrage_seasons = tree2.findall('.//Season' )
我能想到的唯一问题是,不知何故,您下载了一个部分XML文档——不太可能,但我不知道任何其他解释。请注意,上面的脚本取自您的问题。我只添加了for
循环
import xml.etree.ElementTree as ET
import urllib
content = urllib.urlopen(url).read()
tree2 = ET.fromstring(content)
tvrage_seasons = tree2.findall('.//Season' )
在xbmc Elementtree中,由于某种原因,它必须这样工作,一定是有错误或什么东西使它无法工作。但这对我来说是成功的
在xbmc Elementtree中,由于某种原因,它必须这样工作,一定是有错误或什么东西使它无法工作。但这对我来说是成功的
在xbmc Elementtree中,由于某种原因,它必须这样工作,一定是有错误或什么东西使它无法工作。但这对我来说是成功的
由于某种原因,在xbmc Elementtree中必须这样工作,因为一定有错误或其他原因使其无法工作。但这对我来说是可行的!有没有办法使用Elementtree,因为我正在为xbmc使用Elementtree,而该模块已经安装好了installed@Mikewave,我添加了一个使用lxml.etree.ElementTree
的替代方法获取syntaxError:expected path separator([)我放置了我使用的代码above@Mikewave,正确缩进代码。如果可能,请发布完整的回溯。@Mikewave,代码工作正常。请参阅。代码稍有修改(url
添加,root2=…
行删除,因为未使用root2
).有没有一种方法可以使用elementtree,因为我在xbmc上使用elementtree,而该模块已经安装好了installed@Mikewave,我添加了一个使用lxml.etree.ElementTree
的替代方法。我已经尝试过了,并且得到了syntaxError:expected path separator([)我把我使用的代码above@Mikewave,正确缩进代码。如果可能,请发布完整的回溯。@Mikewave,代码工作正常。请参阅。代码稍有修改(url
添加,root2=…
行删除,因为未使用root2
).有没有一种方法可以使用elementtree,因为我在xbmc上使用elementtree,而该模块已经安装好了installed@Mikewave,我添加了一个使用lxml.etree.ElementTree
的替代方法。我已经尝试过了,并且得到了syntaxError:expected path separator([)我把我使用的代码above@Mikewave,正确缩进代码。如果可能,请发布完整的回溯。@Mikewave,代码工作正常。请参阅。代码稍有修改(url
添加,root2=…
行删除,因为未使用root2
).有没有一种方法可以使用elementtree,因为我在xbmc上使用elementtree,而该模块已经安装好了installed@Mikewave,我添加了一个使用lxml.etree.ElementTree
的替代方法