Как я могу искать и заменять в XML на Python? - PullRequest
3 голосов
/ 11 июня 2009

Я нахожусь в процессе создания сценария для перевода XML-документов. Это на самом деле довольно круто, идея (и она работает) взять XML-файл (или папку XML-файлов) и открыть его, проанализировать XML, получить что-нибудь между некоторыми тегами и с помощью API Google Translate перевести его и замените содержимое XML-файлов.

Как я уже сказал, у меня это работает, но только в довольно строгих документах в формате xml, теперь я должен сделать его совместимым с документами, отформатированными по-другому. Итак, моя идея была:

Разобрать xml, найти узел, например:

<template>lorem lipsum dolor mit amet<think><set name="she">Ada</set></think></template>

Сохраните это как строку, выполните поиск по регулярному выражению и замените эту строку. Но я, к сожалению, понятия не имею, как поступить. Я хочу найти строку (узел xml), найти текст между тегами, в этом случае «lorem lipsum dolor mit amet» и «Ada», вызвать функцию с этим текстом в качестве параметра, а затем вставить результат функции. в том же месте, откуда он возник.

Причина, по которой я не могу просто получить текст и перестроить форматирование xml, заключается в том, что будут XML-узлы с различным форматированием, поэтому мне нужно, чтобы он был идентичным ...

Ответы [ 2 ]

7 голосов
/ 11 июня 2009

Не пытайтесь анализировать XML с помощью регулярных выражений! XML не является регулярным , и поэтому регулярные выражения не подходят для выполнения такого рода задач.

Использовать реальный анализатор XML. Многие из них легко доступны для Python. Быстрый поиск привел меня к этому ТАКому вопросу , который описывает, как использовать XPath в Python.

5 голосов
/ 11 июня 2009

ElementTree будет хорошим выбором для этого вида анализа. Он прост в использовании и легок и поддерживает вывод XML после выполнения операций над ним (так же просто, как вызов write ()). Он поставляется со стандартными библиотеками Python в последних версиях (я верю 2.6 +).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...