Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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示例中的XPATH吗_Python_Xml_Xpath_Xml Parsing_Lxml - Fatal编程技术网

Python 需要帮助理解特定XML示例中的XPATH吗

Python 需要帮助理解特定XML示例中的XPATH吗,python,xml,xpath,xml-parsing,lxml,Python,Xml,Xpath,Xml Parsing,Lxml,上周我发布了一个关于需要从xml中提取一些条目的问题。我试图以一种相当手工的方式来完成它,有人建议我使用xml解析器。我一直在尝试lxml,但我还没有掌握它的窍门(我才刚刚开始学习python) 下面是XML结构的一个示例(“ProgramInformation”有许多分支) 这两个项目将始终位于每个分支下的同一位置(因此理论上我可以用这种相当粗糙的方式检索它们)。我还需要检索体裁,但这可能会移动(因为它前面的“关键字”条目数量可变) 我认为这一点的关键是XPATH,但我不明白如何实现它(我在这

上周我发布了一个关于需要从xml中提取一些条目的问题。我试图以一种相当手工的方式来完成它,有人建议我使用xml解析器。我一直在尝试lxml,但我还没有掌握它的窍门(我才刚刚开始学习python)

下面是XML结构的一个示例(“ProgramInformation”有许多分支)

这两个项目将始终位于每个分支下的同一位置(因此理论上我可以用这种相当粗糙的方式检索它们)。我还需要检索体裁,但这可能会移动(因为它前面的“关键字”条目数量可变)

我认为这一点的关键是XPATH,但我不明白如何实现它(我在这里看了很多例子)

请有人帮我实现以下目标:

nsmap = {'xmlns': 'urn:tva:metadata:2010'}

for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
    print info.get('programId') # retrieve crid
    print info.find('.//xmlns:Title', namespaces=nsmap).text # retrieve title
    print info.find('.//xmlns:Genre/xmlns:Name', namespaces=nsmap).text # retrieve genre
1) 实现XPATH以检索“crid”、标题和流派并将其存储到单独的变量中(我将把这些变量写入一个外部文件-这三个变量需要一起写入)

2) 迭代每个分支以提取上面的内容-将有数千个条目

提前谢谢

尝试以下操作:

nsmap = {'xmlns': 'urn:tva:metadata:2010'}

for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
    print info.get('programId') # retrieve crid
    print info.find('.//xmlns:Title', namespaces=nsmap).text # retrieve title
    print info.find('.//xmlns:Genre/xmlns:Name', namespaces=nsmap).text # retrieve genre

谢谢你的反馈。那真是一种享受。所以我的理解是,在第一行(nsmap)中,我在树的顶部选择一个唯一的值,并给它命名(xmlns)。第二行设置我从哪里开始工作的“根”,后续行相对于该根工作。因此,我假设要提取的任何其他标记都被指定为//xmlns:tag\u name/xmlns:next\u level\u tag\u name。“对吗?”尼克,看。
nsmap = {'xmlns': 'urn:tva:metadata:2010'}

for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
    print info.get('programId') # retrieve crid
    print info.find('.//xmlns:Title', namespaces=nsmap).text # retrieve title
    print info.find('.//xmlns:Genre/xmlns:Name', namespaces=nsmap).text # retrieve genre