Конвертировать данные в словаре - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть файл XML, и после того, как я запустил свой Beautiful soup findAll ("named-query") и распечатал его, я получил результат, подобный следующему:

<named-query name="sdfsdfsdf">
        <query>
            ---Query here...--
        </query>
</named-query>

<named-query name="xkjlias">
        <query>
          ---Query here...--
        </query>
</named-query>
   .
   .
   .

Есть ли как я могу преобразовать это в словарь, или json, или CSV, как:

name = "sdfsdfsdf" query = ....

name = "xkjlias" query = ... .

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Код:

import json

from bs4 import BeautifulSoup


text = """
<named-query name="sdfsdfsdf">
    <query>
        ---Query here...--
    </query>
</named-query>

<named-query name="xkjlias">
    <query>
        ---Query here2...--
    </query>
</named-query>"""


soup = BeautifulSoup(text, 'html.parser')
queries = {nq.attrs['name']: nq.text.strip() for nq in soup.find_all('named-query')}
queries_json = json.dumps(queries)

print(queries)  # dict
print(queries_json)  # json

Выход:

{'sdfsdfsdf': '---Query here...--', 'xkjlias': '---Query here2...--'}
{"sdfsdfsdf": "---Query here...--", "xkjlias": "---Query here2...--"}
1 голос
/ 21 февраля 2020

Попробуйте это:

# initialize a dictionary
data = {}

# for each tag 'named-query 
for named_query in soup.findAll('named-query'):
        # get the value of name attribute and store it in a dict
        data['name'] = named_query.attrs['name']
        # traverse its children
        for child in named_query.children:
                # check for '\n' and empty strings
                if len(child.string.strip()) > 0:
                        data['query'] = child.string.strip()
print (data)

>>> {'name': 'sdfsdfsdf', 'query': '---Query here...--'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...