2015-06-24 1 views
0

Итак, у меня есть большой фрагмент XML (это, например: https://www.goodreads.com/author/list/20598?format=xml&key=pVrw9BAFGMTuvfj4Y8VHQ), и я хочу искать его для каждого вида строки < title>, затем проанализируйте текст после этого, чтобы получить фактическое название и временно назначить его как значение переменной, а затем добавить эту переменную в список.Python: поиск строки, анализ текста после этой строки, добавление в список

Другими словами, пройдите этот XML-код и уйдите со списком.

Мои вопросы тогда (и я увидел, в поиске, много вещей, как это, но ничего не совсем одно и то же):

1-Как я пройти через это все тело текста, останавливаясь на каждом появлении < title> выполнить операцию, которую я описываю здесь?

2-Как точно следует разобрать это название? То есть, я хочу захватить строку, которая встречается между < title> и </title>?

Упреждающее сообщение.

+0

Вы пробовали что-нибудь? – flexcalibur6

+0

У меня возникли проблемы с визуализацией; Я взял класс Python более двух лет назад, но у меня не было возможности реализовать его с тех пор, поэтому моя память стала ржавой. Я подозреваю, что часть 1 будет операцией «ЗА», верно? И затем для части 2, мне нужно разобрать 6 пробелов и затем. , , Я просто рисую пустую. –

+0

Прежде всего, не пытайтесь самостоятельно анализировать XML. Вместо этого используйте парсер XML python, например [tag: lxml]. – David

ответ

0

Предполагая, что <title> вы имеете в виду название тег, любой на полпути приличные XML-парсер будет делать это легко: это даст вам знать, когда title тег был найден, а затем извлечь текст внутри этого тега (название, которое вы хотите).

0

Как уже отмечалось, для XML существует множество парсеров. Однако, если вы хотите сделать это самостоятельно, то вот функция, которая будет работать, за исключением случаев, когда флаги элемента title (я не знаю, что они технически называются) появляются в тексте с комментариями или иным образом незаконным разделы текста.

def extract_text_between_flags(inputText, flagBegin, flagEnd): 
    # Instantiate an empty list to store the results 
    excerpts = list() 

    # Find the first occurrence of the begin flag 
    indexBegin = inputText.find(flagBegin) 
    # Until the begin flag is no longer found 
    while indexBegin > -1: 
     # From the current begin flag location, search forward to the first 
     # occurrence of the end flag 
     indexEnd = inputText.find(flagEnd, indexBegin + len(flagBegin)) + len(flagEnd) 
     # If the end flag is not found, stop searching 
     if indexEnd <= 0: 
      break 
     # Extract the relevant passage from the text and add it to the list 
     excerpt = inputText[indexBegin+len(flagBegin):indexEnd-len(flagEnd)] 
     excerpts.append(excerpt) 

     # Set the new search starting point as the next occurrence of the 
     # begin flag 
     indexBegin = inputText.find(flagBegin, indexEnd) 

    return excerpts 

titles = extract_text_between_flags(myXMLString, '<title>', '</title>') 
Смежные вопросы