Обработка XML в [закрытом] Python

Я считаю, что

istream inputStream;
int myArray[3][5];
for(int i = 0; i < 3; i++)
    for(int j = 0; j < 5; j++)
        istream >> myArray[i][j];

должен делать то, что вам нужно.

68
задан piRSquared 30 December 2016 в 12:56
поделиться

9 ответов

Лично, я играл с несколькими из встроенных опций на XML-тяжелом проекте и обосновался на pulldom как лучший выбор для менее составных документов.

Специально для маленького простого материала, мне нравится событийно-ориентированная теория парсинга вместо того, чтобы настроить целое, убил обратных вызовов для относительно простой структуры. Вот хорошее быстрое обсуждение того, как использовать API.

, Что я люблю: можно обработать парсинг в for цикл вместо того, чтобы использовать обратные вызовы. Вы также задерживаете полный парсинг (часть "получения по запросу") и только получаете дополнительную деталь, когда Вы звоните expandNode(). Это удовлетворяет мое общее требование для "ответственной" эффективности, не жертвуя простотой использования и простотой.

28
ответ дан saint_groceon 24 November 2019 в 14:19
поделиться

ElementTree имеет хороший pythony API. Я думаю, что это даже поставляется как часть python 2.5

, Это находится в чистом Python и как я говорю, довольно хороший, но если Вы волнуете необходимость в большем количестве производительности, тогда , lxml представляет тот же API и использует libxml2 под капотом. Можно теоретически просто загрузить его, когда Вы обнаруживаете необходимость в нем.

31
ответ дан Gareth Simpson 24 November 2019 в 14:19
поделиться

Существует 3 главных способа иметь дело с XML в целом: dom, саксофон и xpath. dom модель хороша, если можно позволить себе загрузить весь xml файл в память сразу, и Вы не возражаете иметь дело со структурами данных, и Вы смотрите на очень/больше всего модели. Модель саксофона является замечательной, если Вы только заботитесь о нескольких тегах, и/или Вы имеете дело с большими файлами и можете обработать их последовательно. xpath модель является определенным из каждого - можно привередливо выбрать пути к элементам данных, в которых Вы нуждаетесь, но она требует, чтобы больше библиотек использовало.

, Если Вы хотите простой и упакованный с Python, minidom является Вашим ответом, но это является довольно хромым, и документация, "вот документы о dom, поймите его". Это является действительно раздражающим.

Лично, мне нравится cElementTree, который является более быстрой (находящейся в c) реализацией ElementTree, который является подобной dom моделью.

я использовал системы саксофона, и во многих отношениях они - больше "pythonic" в своем чувстве, но я обычно заканчиваю тем, что создал основанные на состоянии системы для обработки их, и тот путь находится безумие (и ошибки).

я говорю, идут с minidom, если Вам нравится исследование или ElementTree, если Вы хотите хороший код, который работает хорошо.

6
ответ дан Kent Quirk 24 November 2019 в 14:19
поделиться

Я использовал ElementTree для нескольких проектов и рекомендую его.

Это - pythonic, прибывает 'в поле' с Python 2.5, включая c версию cElementTree (xml.etree.cElementTree), который в 20 раз быстрее, чем чистая версия Python и очень прост в использовании.

lxml имеет некоторые преимущества производительности, но они неровны, и необходимо проверить сравнительные тесты сначала на вариант использования.

Насколько я понимаю, код ElementTree может легко быть портирован к lxml.

6
ответ дан 24 November 2019 в 14:19
поделиться

Это зависит немного от того, насколько сложный документ должен быть.

я использовал minidom много для записи XML, но это обычно просто читало документы, делая некоторые простые преобразования, и записывая их обратно. Это работало достаточно хорошо, пока мне не была нужна способность заказать атрибуты элемента (для удовлетворения древнего приложения, которое не анализирует XML правильно). В той точке я сдался и записал XML сам.

, Если Вы только работаете над простыми документами, затем делая его сами, может быть более быстрым и более простым, чем изучение платформы. Если можно очевидно записать XML вручную, то можно, вероятно, кодировать его вручную также (просто не забывают правильно выходить из специальных символов и использования str.encode(codec, errors="xmlcharrefreplace")). Кроме этой путаницы, XML является достаточно регулярным, который Вы не делаете потребность специальная библиотека для записи его. Если документ является слишком сложным для записи вручную, то необходимо, вероятно, изучить одну из платформ, уже упомянутых. Ни в каком смысле должен, необходимо записать общему писателю XML.

6
ответ дан giltay 24 November 2019 в 14:19
поделиться

Так как Вы упомянули создание "довольно простого" XML, , minidom модуль (часть Библиотеки Стандарта Python), вероятно, удовлетворит потребностям. Если у Вас есть опыт с представлением DOM XML, необходимо найти API довольно прямым.

4
ответ дан Matt 24 November 2019 в 14:19
поделиться

Я пишу сервер SOAP, который получает запросы XML и создает ответы XML. (К сожалению, это не мой проект, таким образом, это - закрытый исходный код, но это - другая проблема).

оказалось для меня, что создание (SOAP), XML-документы довольно просты, если у Вас есть структура данных, которая "соответствует" схеме.

я сохраняю конверт, так как конверт ответа является (почти) тем же как конвертом запроса. Затем так как моя структура данных (возможно вложена) словарь, я создаю строку, которая превращает этот словарь в < ключ> value< / ключ> объекты.

Это - задача, которую рекурсия делает простым, и я заканчиваю с правильной структурой. Это все сделано в коде Python и достаточно в настоящее время быстро для производственного использования.

можно также (относительно) легко создать списки также, хотя в зависимости от клиента, можно поразить проблемы, если Вы не даете подсказки длины.

Для меня, это было намного более просто, так как словарь является намного более легким способом работать, чем некоторый пользовательский класс. Для книг, генерируя XML намного легче, чем парсинг!

4
ответ дан OmG 24 November 2019 в 14:19
поделиться

Если Вы собираетесь быть зданием сообщения SOAP, проверяете soaplib. Это использует ElementTree под капотом, но это обеспечивает намного более чистый интерфейс для сериализации и десериализации сообщений.

1
ответ дан William McVey 24 November 2019 в 14:19
поделиться

Я предполагаю, что.Net-способ обработать XML основывается на некоторой версии MSXML, и в этом случае я предполагаю, что использование, например, minidom заставило бы Вас чувствовать несколько дома. Однако, если это - простая обработка, Вы делаете, любая библиотека, вероятно, сделает.

я также предпочитаю работать с ElementTree при контакте с xml в Python, это - очень аккуратная библиотека.

1
ответ дан toonarmycaptain 24 November 2019 в 14:19
поделиться
Другие вопросы по тегам:

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