次のXMLがあります。PythonでネストされたタグのXMLを解析する方法
私はpythonでこのXMLを解析しようと含まれていますURL array
を作成してい
<component name="QUESTIONS">
<topic name="Chair">
<state>active</state>
<subtopic name="Wooden">
<links>
<link videoDuration="" youtubeId="" type="article">
<label>Understanding Wooden Chair</label>
<url>http://abcd.xyz.com/1111?view=app</url>
</link>
<link videoDuration="" youtubeId="" type="article">
<label>How To Assemble Wooden CHair</label>
<url>http://abcd.xyz.com/2222?view=app</url>
</link>
<link videoDuration="11:35" youtubeId="Qasefrt09_2" type="video">
<label>Wooden Chair Tutorial</label>
<url>/</url>
</link>
<link videoDuration="1:06" youtubeId="MSDVN235879" type="video">
<label>How To Access Wood</label>
<url>/</url>
</link>
</links>
</subtopic>
</topic>
<topic name="Table">
<state>active</state>
<subtopic name="">
<links>
<link videoDuration="" youtubeId="" type="article">
<label>Understanding Tables</label>
<url>http://abcd.xyz.com/3333?view=app</url>
</link>
<link videoDuration="" youtubeId="" type="article">
<label>Set-up Table</label>
<url>http://abcd.xyz.com/4444?view=app</url>
</link>
<link videoDuration="" youtubeId="" type="article">
<label>How To Change table</label>
<url>http://abcd.xyz.com/5555?view=app</url>
</link>
</links>
</subtopic>
</topic>
</component>
: 1.リンク]タブのXML 2に存在するすべてのHTTP URLのユーチューブが存在する場合、そのをキャプチャし、 youtubeのURLを準備してURL array
に追加してください。
私は次のコードを持っていますが、私にURLとリンクを与えていません。
from xml.etree import ElementTree
with open('faq.xml', 'rt') as f:
tree = ElementTree.parse(f)
for node in tree.iter():
print node.tag, node.attrib.get('url')
for node in tree.iter('outline'):
name = node.attrib.get('link')
url = node.attrib.get('url')
if name and url:
print ' %s :: %s' % (name, url)
else:
print name
すべてのURLを取得するにはどうすればよいですか?
は、以下の回答に基づいて次のコードを作成しました。 次の問題は、すべてではなく1つのURLだけを印刷していることです。
from xml.etree import ElementTree
def fetch_faq_urls():
url_list = []
with open('faq.xml', 'rt') as f:
tree = ElementTree.parse(f)
for link in tree.iter('link'):
youtube = link.get('youtubeId')
if youtube:
print "https://www.youtube.com/watch?v=" + youtube
video_url = "https://www.youtube.com/watch?v=" + youtube
url_list.append(video_url)
# print "youtubeId", link.find('label').text, '???'
else:
print link.find('url').text
article_url = link.find('url').text
url_list.append(article_url)
# print 'url', link.find('label').text,
return url_list
faqs = fetch_faq_urls()
print faqs
ありがとうございます。私は何をする必要があるかという考えを得ました。ありがとうtdelaney –
私の質問を開発コードで更新しましたか?私はなぜ配列に1つの値を押しているのか分からないのですか? –
@in_learning_software - ちょっとしたインデント問題です。 'return url_list'は' for'ブロックにあるので、ループの最初のパスで実行されることに注意してください。単に次の高いレベルに専念する。 – tdelaney