2010-01-22 1 views
1

Я использую xml-файл для хранения конфигураций программного обеспечения.XML для хранения системных путей в Python с lxml

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

> 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) 

файл был бы:

< тип настройки = "ул" название = "MyPath" значение = "C: \ Test \ 3 тесты \ тест" />

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

я получить etree дочерний объект со значением строки, но строка содержит

\ 3

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

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

спасибо !!

+0

Это просто проблема с обратной косой чертой? Если это так, просто используйте косые черты - они отлично работают и в Windows. –

ответ

1

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

я получить etree дочерний объект со значением строки, но строка содержит характер

\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, но это был проход раньше. – nios

+1

Почему в небесном имени вы используете exec? setattr (self, k, v) –

+1

+1 Уважаемый господин, никогда не используйте exec! – bobince

Смежные вопросы