XML для хранения системных путей в Python с помощью lxml

1

Я использую xml файл для хранения конфигураций для программного обеспечения.

Одна из этих конфигураций будет системным путем, например

> set_value = "c:\\test\\3 tests\\test"

я могу сохранить его, используя:

> setting = etree.SubElement(settings,
> "setting", name=tmp_set_name, type =
> set_type , value= set_value)

Если я использую

doc.write(output_file, method='xml',encoding = 'utf-8', compression=0)

файл будет выглядеть следующим образом:

< type type = "str" ​​ name= Значение "MyPath" = "c:\test\3 tests\test" /" >

Теперь я прочитал его снова с помощью метода etree.parse

Я получаю дочерний объект etree со строковым значением, но строка содержит

\ 3

и если я попытаюсь использовать его для записи снова в xml, он будет интерпретироваться!!!!! Поэтому я больше не могу использовать его в качестве пути  Может быть, мне просто не хватает простой операции с строкой, но я не вижу ее =) Как бы вы решили это разумно?

Это пример, но как лучше всего вы думаете хранить пути в xml и анализировать их с помощью lxml?

Спасибо!

  • 0
    Это просто проблема с обратными слешами? Если это так, просто используйте косую черту - они также отлично работают на Windows.
Теги:
lxml

1 ответ

1
Лучший ответ

Теперь я прочитал его снова с помощью метод etree.parse

Я получаю дочерний объект etree с string, но строка содержит далее

\3

и если я попытаюсь использовать его для снова напишите в xml, это будет интерпретируется!!!!!

Я просто попробовал это, и он не интерпретируется. Атрибуты элементов, возвращаемые после разбора:

{'type': 'str', 'name': 'yowza!', 'value': 'c:\\test\\3 tests\\test'}

Итак, как вы видите, это работает так же, как вы ожидали, что это сработает. Если у вас действительно есть эта проблема, вы делаете что-то еще, чем то, что вы говорите. Покажите нам реальный код или создайте небольшой пример кода, в котором вы демонстрируете проблему и используете ее.

  • 0
    Спасибо, ваш тест очень полезен. Я использую значения, которые я удаляю из xml, чтобы создать переменные внутри объекта настройки. Проблема была в этом отрывке, как и в коде: exec ('self.% S =% s'% (k, v)), где k - имя атрибута, а v - значение \\ in при замене в% s, где интерпретированы. Когда я читал из объекта для создания XML, я читал строку без двойных \\ Я ошибочно думал, что проблема была в печати lxml, но это был отрывок раньше.
  • 1
    Почему в небесах имя вы используете exec? setattr (self, k, v)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню