Как использовать XmlSerializer для десериализации в существующий экземпляр?

import requests
from bs4 import BeautifulSoup

#url = 'https://www.goodreads.com/quotes'
#r = requests.get(url)
#soup = BeautifulSoup(r.content, 'html.parser')

html = """
       <div class="quoteText">&ldquo;Insanity is doing the same thing, over and over again, but expecting different results.&rdquo; <br>  &#8213;
       <span class="authorOrTitle">Narcotics Anonymous</span>
       </div>
"""

soup = BeautifulSoup(html, 'html.parser')

quotes = soup.find_all('div', {'class': 'quoteText'})

for quote in quotes:
    if quote.text is not None:
        quote_ = quote.text
        quote_data = quote_.split(" ―")
        quote_without_author = quote_data[0]
        quote_author = quote_data[1]
        print(quote_without_author.strip())
        print(quote_author.strip())

Вы можете разделить данные на -, поэтому элемент [0] - ваша цитата, [1] - ваш автор.

Выход:

“Insanity is doing the same thing, over and over again, but expecting different results.”
Narcotics Anonymous
6
задан Martin 12 February 2010 в 11:56
поделиться

3 ответа

Я думаю, что Вы на правильном пути с Отражательной идеей.

Так как у Вас, вероятно, есть обертка вокруг операций XML так или иначе, Вы могли взять в целевом объекте, обычно делать десериализацию в новый объект, затем делать что-то подобное клонированию путем копирования один за другим только свойств, содержащих значения не по умолчанию.

Не должно случаться так, что комплекс для реализации этого, и это будет смотреть на потребителей от остальной части приложения точно так же, как оперативная десериализация.

1
ответ дан 17 December 2019 в 04:53
поделиться

В основном Вы не можете. XmlSerializer строго конструктивно. Единственная интересная вещь можно сделать для настройки XmlSerializer должен реализовать IXmlSerializable и сделайте все сами - не привлекательная опция (и она все еще создаст новые экземпляры с конструктором по умолчанию, и т.д.).

xml строгое требование? Если можно использовать другой формат, protobuf-сетевые поддержки, объединяющие фрагменты в существующие экземпляры, так же просто как:

Serializer.Merge(source, obj);
4
ответ дан 17 December 2019 в 04:53
поделиться

Я поразил ту же проблему несколько недель назад.

Я поместил метод, Десериализовывают (строка сериализировала форму) в интерфейсе ISelfSerializable, который реализовал мой класс объекта. Я также удостоверился, что интерфейс вынудил класс иметь конструктора по умолчанию.

На моей фабрике я создал объект того типа и затем десериализовал строку в него.

0
ответ дан 17 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: