2017-07-07 13 views
0

次のコードに問題がありますか?私は出力としてブギーを期待しています。Pythonのnamespaced xml-parsingエラー

import urllib.request 
from html.parser import HTMLParser 
import xml.etree.ElementTree as ET 

html = '''<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns="http://purl.org/rss/1.0/" 
xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#" 
><foo><title>boogie</title></foo></rdf:RDF>''' 

root = ET.fromstring(html) 
ns = { 'default': 'http://purl.org/rss/1.0/', 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} 

titles = root.findall("default:.//title", ns) 
[print(title.text) for title in titles] 

答えて

1
import urllib.request 
from html.parser import HTMLParser 
import xml.etree.ElementTree as ET 

html = '''<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns="http://purl.org/rss/1.0/" 
xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#" 
><foo><title>boogie</title></foo></rdf:RDF>''' 

root = ET.fromstring(html) 
ns = '{http://purl.org/rss/1.0/}' 

titles = root.findall(".//%stitle" % ns) 
print titles[0].text 

これはバージョン

+0

を取り組んでいる。しかし、両方の構文が動作するはずです。 – user3210796

+0

この行を変更することができます: 'titles = root.findall(" default:.// title "、ns)' を 'titles = root.findall("。default:title "、ns)'に変更します。作業。 'default'を間違った場所に置きます – gaback