Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
drunkgranny
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
#1

Xml parse

15.08.2014, 19:33. Просмотров 1415. Ответов 6
Метки нет (Все метки)

Нужна помощь!
Имеется файл xml и файл txt.
Содержание файла txt:
Some text:cve-2012-4456:some text
Some text:cve-2009-1112:some text

Содержание файла xml:

XML
1
2
3
4
<cve>
<item name=cve-2012-4456 ...
<desc>buffer overflow</desc></item>
</cve>
Нужно распарсить xml файл по шаблону txt файла.

Чтобы он сравнивал cve txt с cve xml и выводил информацию только тех cve которые имеются в txt файле.


Формат вывода:

Cve-2012-4456
Buffer over flow.


На данный момент написал только парсер xml файла.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from xml.dom.minidom import *
from lxml import *
 
xmldoc = parse('allitems.xml')
 
root = xmldoc.getElementsByTagName("cve")
cve_number = xmldoc.getElementsByTagName("item")
description = xmldoc.getElementsByTagName("desc")
 
 
#Запись в файл
with open('cve_base.txt', 'w') as f:
 for item in cve_number:
  f.write(item.getAttribute('name') + '\n')
 #print item.getAttribute('name')
 for child in item.getElementsByTagName('desc'):
  f.write(child.childNodes[0].nodeValue + '\n\n')
  #print child.childNodes[0].nodeValue
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 19:33
Ответы с готовыми решениями:

Parse XML файла
В питоне новичок. База скачана с офф сайта drugbank.ca В общем, имеем базу в...

Создать файл xml schema на основе корректного xml
Вообщем есть следующая задача. Корректный XML файл results.xml содержит...

Parse xml
Здравствуйте! Парсинг xml делаю в первый раз. Для начала взяла пример из...

parse xml (string)
здравствуйте, имеется string такого содержания &lt;?xml version=&quot;1.0&quot;...

Rss reader - parse xml
http://buxoro.uz/uz/yangiliklar.xml how to parse this xml . . help me...

6
Wolkodav
609 / 462 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
15.08.2014, 22:25 #2
drunkgranny, а проблема в чем?
0
drunkgranny
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
15.08.2014, 22:27  [ТС] #3
проблема заключается в том, что не могу понять как сравнивать два xml файла, текстовый файл я перегнал в xml при помощи библиотеки lxml. Затем открыл его на чтение, а как дальше сравнивать их ума не приложу...
0
Wolkodav
609 / 462 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
15.08.2014, 22:32 #4
drunkgranny, ну считали один файл, второй, потом просто бежите по двум массивам строк.

Добавлено через 48 секунд
Два массива сравнить - крайне тривиальная задача. У питона есть метод у файлового дескриптора - readlines( возвращает массив строк в файле)
0
drunkgranny
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
16.08.2014, 14:04  [ТС] #5
про readlines() я в курсе, при помощи этого метода я и строил xml из txt.

Добавлено через 15 часов 30 минут
Ну вообщем пришел к выводу, что легче не перегонять txt в xml, а сравнить два txt файла. Теперь столкнулся с проблемой, как сравнить именно определенное выражение в строке со строкой в другом файле.

у меня имеется строка файла f1:

some textrivet-123-123:some text
мне нужно сравнить со строкой файла f2:

privet-123-123
some text
privet-123-124
some text
и если нашлись совпадения по файлу f1 в файле f2 вывести:

privet-123-123
some text
0
pyuser
210 / 195 / 63
Регистрация: 26.05.2011
Сообщений: 363
18.08.2014, 05:05 #6
Так попробуйте:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import lxml.etree
 
parser = lxml.etree.XMLParser(remove_blank_text=True, strip_cdata=False)
with open("allitems.xml", "rb") as f:
    xml = lxml.etree.XML(f, parser)
 
with open("cve_base.txt", "rt", encoding="utf-8") as fin,
        open("cve_out.txt", "wt", encoding="utf-8") as fout:
    for line in fin:
        _, cve, _ = line.split(":")
        for text in xml.xpath("//item[@name='{}']/desc/text()".format(cve)):
            print("{}\n{}".format(cve, text), file=fout)
ЗЫ. не проверял

Добавлено через 57 секунд
Так попробуйте:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import lxml.etree
 
parser = lxml.etree.XMLParser(remove_blank_text=True, strip_cdata=False)
with open("allitems.xml", "rb") as f:
    xml = lxml.etree.XML(f, parser)
 
with open("cve_base.txt", "rt", encoding="utf-8") as fin,
        open("cve_out.txt", "wt", encoding="utf-8") as fout:
    for line in fin:
        _, cve, _ = line.split(":")
        for text in xml.xpath("//item[@name='{}']/desc/text()".format(cve)):
            print("{}\n{}".format(cve, text), file=fout)
ЗЫ. не проверял
0
drunkgranny
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
18.08.2014, 05:07  [ТС] #7
Тема закрыта, часа два назад разобрался сам. Всем спасибо!
0
18.08.2014, 05:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2014, 05:07

Parse XML ответ от сервера
Вообщем так уходит GET, приходит ответ: With...

Parse ajax xml on page
С сервера приходит XML вида &lt;title&gt;title1&lt;/title&gt; ...

Parse XML как отфильтровать?
Есть парсинг с http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN Как мне сделать,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru