Формат строки в файл XML - PullRequest
       3

Формат строки в файл XML

0 голосов
/ 15 декабря 2018

Я хочу переформатировать строку в структуру XML, но моя строка не в формате XML (с использованием Python 2.7).Я считаю, что правильный способ - сначала создать XML-формат ввода в одну строку, а затем использовать XML Pretty Print для создания XML-файла с несколькими строками и отступами ( Довольно печатать XML на Python ).

Ниже приведен пример ввода после вызова REST API сервера истории с сервера Hadoop 1 .Входные данные:

'{"jobAttempts":{"jobAttempt":[{"nodeHttpAddress":"slave2:8042","nodeId":"slave2:39637","id":1,"startTime":1544691730439,"containerId":"container_1544631848492_0013_01_000001","logsLink":"http://23.22.43.90:19888/jobhistory/logs/slave2:39637/container_1544631848492_0013_01_000001/job_1544631848492_0013/hadoop2"}]}}' 

Выходные данные:

'<jobAttempts><jobAttempt><nodeHttpAddress>slave2:8042</nodeHttpAddress><nodeId>slave2:39637</nodeId><id>1</id><startTime>1544691730439</startTime><containerId>container_1544631848492_0013_01_000001</containerId><logsLink>http://23.22.43.90:19888/jobhistory/logs/slave2:39637/container_1544631848492_0013_01_000001/job_1544631848492_0013/hadoop2</logsLink></jobAttempt></jobAttempts>' 

Окончательный вывод

<jobAttempts>
    <jobAttempt>
        <nodeHttpAddress>slave2:8042</nodeHttpAddress>
        <nodeId>slave2:39637</nodeId>
        <id>1</id>
        <startTime>1544691730439</startTime>
        <containerId>container_1544631848492_0013_01_000001</containerId>
    <logsLink>http://23.22.43.90:19888/jobhistory/logs/slave2:39637/container_1544631848492_0013_01_000001/job_1544631848492_0013/hadoop2</logsLink>
    </jobAttempts>
</jobAttempt>

* Эта строка на самом деле представляет собой XML-файл, который не содержит никакой информации о стилесвязано с этим.

1 Ответ

0 голосов
/ 15 декабря 2018

Я обнаружил, что исходное представление API REST сервера истории действительно представляет собой XML-файл в одну строку.Таким образом, мне пришлось читать исходное представление, а не старое проблемное представление с python.Раньше я использовал

import urllib2
contents = urllib2.urlopen("http://http://23.22.43.90:19888/ws/v1/history/mapreduce/jobs/job_1544631848492_0013//jobattempts").read()

Теперь я загружаю исходный вид html-страницы с помощью selenium и BeautifulSoup и сохраняю его локально.

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import xml.dom.minidom
driver = webdriver.Firefox()
driver.get("http://23.22.43.90:19888/ws/v1/history/mapreduce/jobs/job_1544631848492_0013/jobattempts")
page_source = driver.page_source
driver.close()
soup = BeautifulSoup(page_source, "html.parser")
print(soup)
xml = xml.dom.minidom.parseString(str(soup))
pretty_xml_as_string = xml.toprettyxml()
file = open("./content_new_2.xml", 'w')
file.write(pretty_xml_as_string)
file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...