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的xpath问题_Python_Xml_Xpath_Xbmc - Fatal编程技术网

python的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

elementtree非常新,所以我尝试解析xbmc电视插件的xml文件。下面是我遇到问题的代码。我认为我的xpath不正确,占位符对属性无效

这是我正在处理的xml文件-

SyntaxError:expected path separator([)是我根据以下公式得到的

此模块为的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']
根据:

此模块为的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
的替代方法