синтаксический анализ Python для извлечения строки больше заданного значения - PullRequest
0 голосов
/ 04 октября 2018

Как разобрать XML-файл с помощью Python, где я пытаюсь получить "оценка" больше 50, если выход.В моем XML-файле он существует, он должен распечатать 65,93.

Test.xml

    <analysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <description/>
    <alert url="/alert/224.xml" message="Hello"/>
    <warning url="/warning/2.xml">
    <score>65</score>
    </warning>
    <warning url="/warning/23.xml">
    <score>33</score>
    </warning>
    <warning url="/warning/233.xml">
    <score>93</score>
    </warning>
    <warning url="/warning/233.xml">
    <score>93</score>
    </warning>
    </analysis>

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Используйте BeautifulSoup

from bs4 import BeautifulSoup
score_set=set()
soup = BeautifulSoup(open('Test.xml'),"html.parser")
for score in soup.findAll('score'):
    if (int(score.next_element)>50):
        score_set.add(int(score.next_element))
print(score_set) # {65, 93}
0 голосов
/ 04 октября 2018
import xml.etree.ElementTree as ET

tree = ET.parse("Test.xml")

warnings = tree.findall("warning")

values = map(lambda x: x.getchildren()[0].text, warnings)

print ','.join(set(filter(lambda f: int(f)> 50, values)))
0 голосов
/ 04 октября 2018

Вы можете использовать BeautifulSoup для анализа файла xml.Затем для каждого результата мы можем добавить этот показатель к set, что означает отсутствие повторов (т. Е. Мы не выводим 93 дважды).

import bs4
soup = bs4.BeautifulSoup(open('Test.xml'))
nums = set()
for score in soup.findAll('score'):
    num = int(score.text)
    if num > 50:
        nums.add(num)

print(' '.join(str(n) for n in nums))

, что дает:

65 93
...