Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Python и XML: хочу читать значения тегов


(oleksii.burdin) #1

Добрый день.

Использую стандартную xml.dom.minidom

Хочу прочитать значение тега из XML файла, и у меня это не получается по непонятной мне причине. 

Делаю так:

from xml.dom.minidom import *

sitemap_file = parse(open('C:/home/test.xml'))
urls = sitemap_file.getElementsByTagName('url')
loc = urls[0].getElementsByTagName('loc')
print loc[0].nodeValue
 
Пишет: None
 
Хочу, чтоб писало: 'http://www.exapple.com/a'

 

Файл C:/home/test.xml : 

<?xml version="1.0" encoding="UTF-8"?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://www.exapple.com/a</loc>
      <lastmod>2012-12-20</lastmod>
      <changefreq>daily</changefreq>
      <priority>0.5</priority>
   </url>
</urlset>
 
Что я делаю не так?
Если кто-то пользуется другой удобной библиотекой, поделитесь. Мне надо только читать XML, писать ненадо.
Заранее спасибо.

 


(Mykhailo Poliarush) #2

loc[0].firstChild.nodeValue

а вообще можно и через ElementTree, я так учу в своем курсе http://poliarush.com/trainings/python

например

 

from xml.etree import ElementTree as et
for el in et.parse('test.xml').getroot().findall(".//*"):
print el.text

(Alex.A) #3

я делаю xml-парсинг следующим образом:

import urllib2

from xml.dom.minidom import parseString

file1 = urllib2.urlopen('/filePath')
data = file1.read()
file1.close()
dom = parseString(data)
TagXml = dom.getElementsByTagName('Tag')[0].toxml()

print TagXML

 

Вопрос в тему:

как вернуть содержимое атрибута тега?

т.е. в xml-ке есть например тег:

<POPULARITY URL="URL" TEXT="1774" SOURCE="panel"/> - как вернуть только содержимое атрибута "TEXT" тега POPULARITY?


(Mykhailo Poliarush) #4

toxml() вернет элемент и само значение
а нужно было вернуть только значение элемента
в принципе, потом конечно значение выкусить там не проблема
это уже дело вкус

на счет аттрибута, тут просто надо у элемента вызвать соотвествующий метод

http://docs.python.org/2/library/xml.dom.html#element-objects


(oleksii.burdin) #5

спасибо всем!