我正在编写我的第一个pythonxml查询,但没有成功。我有以下代码:
import xml.etree.ElementTree as ET
root = ET.parse(r'wiktionary.xml').getroot()
s = set()
for ns_tag in root.findall('page/ns'):
value = ns_tag.text
s.add(value)
for page_tag in root.findall('page'):
print(page_tax.find('ns').text)
XML的格式如下
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="af">
<siteinfo>
<sitename>Wiktionary</sitename>
<dbname>afwiktionary</dbname>
<base>https://af.wiktionary.org/wiki/Tuisblad</base>
<generator>MediaWiki 1.33.0-wmf.19</generator>
<case>case-sensitive</case>
<namespaces>
<namespace key="-2" case="case-sensitive">Media</namespace>
<namespace key="-1" case="first-letter">Spesiaal</namespace>
<namespace key="0" case="case-sensitive" />
<namespace key="1" case="case-sensitive">Bespreking</namespace>
<namespace key="2" case="first-letter">Gebruiker</namespace>
<namespace key="3" case="first-letter">Gebruikerbespreking</namespace>
<namespace key="4" case="case-sensitive">Wiktionary</namespace>
<namespace key="5" case="case-sensitive">Wiktionarybespreking</namespace>
<namespace key="6" case="case-sensitive">Lêer</namespace>
<namespace key="7" case="case-sensitive">Lêerbespreking</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">MediaWikibespreking</namespace>
<namespace key="10" case="case-sensitive">Sjabloon</namespace>
<namespace key="11" case="case-sensitive">Sjabloonbespreking</namespace>
<namespace key="12" case="case-sensitive">Hulp</namespace>
<namespace key="13" case="case-sensitive">Hulpbespreking</namespace>
<namespace key="14" case="case-sensitive">Kategorie</namespace>
<namespace key="15" case="case-sensitive">Kategoriebespreking</namespace>
<namespace key="828" case="case-sensitive">Module</namespace>
<namespace key="829" case="case-sensitive">Module talk</namespace>
<namespace key="2300" case="case-sensitive">Gadget</namespace>
<namespace key="2301" case="case-sensitive">Gadget talk</namespace>
<namespace key="2302" case="case-sensitive">Gadget definition</namespace>
<namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
</namespaces>
</siteinfo>
<page>
<title>MediaWiki:Edithelppage</title>
<ns>8</ns>
<id>21</id>
<revision>
<id>17266</id>
<parentid>3081</parentid>
<timestamp>2006-06-23T20:14:26Z</timestamp>
<contributor>
<username>Manie</username>
<id>18</id>
</contributor>
<minor />
<comment>typo</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text xml:space="preserve">{{ns:4}}:Redigeer</text>
<sha1>nrxi3shwkpass1der614rzu1wcrjdok</sha1>
</revision>
</page>
<page>
<title>MediaWiki:Sitesubtitle</title>
<ns>8</ns>
<id>70</id>
<revision>
<id>17618</id>
<parentid>7587</parentid>
<timestamp>2006-06-26T16:10:58Z</timestamp>
<contributor>
<username>Manie</username>
<id>18</id>
</contributor>
<model>wikitext</model>
<format>text/x-wiki</format>
<text xml:space="preserve">Die vrye woordeboek</text>
<sha1>3gmth4w27p5u4mdo8yo8qbb2cj47l1b</sha1>
</revision>
</page>
</mediawiki>
此代码也不打印任何内容:
from lxml import etree
tree = etree.parse(r'E:\Downloads\WikipediaAF\test2.xml')
root = tree.getroot()
for ns_tag in root.findall('page'):
for tag in ns_tag.getchildren():
if tag.tag == 'ns':
print(tag.text)
我试图在<ns>
标记之间提取一个不同的值列表,但是集合s
返回为空,也没有打印任何内容。你知道吗
有人知道我哪里出错了吗?你知道吗
原来它需要名称空间。此代码有效:
如果我正确理解你的问题,让我们试试这个方法(与你的方法有些不同,但我更习惯于……):
输出:
您可以修改它,将输出添加到集合、列表或诸如此类的内容中。你知道吗
因为您只在寻找
ns
元素,所以这可能有用:输出:
是这个主意吗?你知道吗
相关问题 更多 >
编程相关推荐