Я предваряю это, указав, что я использую Python 2.7.3 (x64) для Windows 7 с lxml 2.3.6.lxml добавляет urlencoding в xml?
У меня есть небольшая, странная проблема. Я надеюсь, что кто-то может помочь. Я не нашел решение в Интернете, возможно, я не искал правильные вещи.
В любом случае, у меня есть проблема, когда я программно создаю XML с помощью lxml, а затем выводя его в текстовый файл, проблема заключается в том, что lxml преобразует возврат каретки в текст
, почти как urlencoding, но я не используя HTML Я использую XML.
К примеру, у меня есть простой текстовый файл, созданный в блокноте, как это:
This
is
my
text
Я тогда построить некоторые XML и добавить этот текст в XML:
from lxml import etree
textstr = ""
fh = open("mytext.txt", "rb")
for line in fh:
textstr += line
root = etree.Element("root")
a = etree.SubElement(root, "some_element")
a.text = textstr
print etree.tostring(root)
Проблема здесь вывод вывода выглядит следующим образом:
<root><some_element>This
is
my
text</some_element></root>
Для моих целей разрывы строк в порядке, но t он
элементов нет.
Что мне удалось выяснить, так это то, что это происходит, потому что я открываю текстовый файл в двоичном режиме "rb"
(который мне действительно нужно делать, когда мое приложение индексирует большой текстовый файл). Если я не открываю файл в двоичном режиме "r"
, то вывод не содержит
(но, конечно, тогда мое индексирование не работает).
Я также попытался изменить etree.tostring
к:
print etree.tostring(root, method="xml")
Однако нет никакой разницы в результатах.
Теперь я могу выгрузить XML-текст в строку, а затем заменить артефакты $#13;
, однако я надеялся на более элегантное решение - потому что текстовые файлы, которые я разбираю, не под моим контролем, и я опасается, что другие элементы текстового файла могут быть преобразованы в кодировку стиля URL без моего ведома.
Кто-нибудь знает способ предотвращения этой кодировки?
Что вы подразумеваете под «мое индексирование не работает». В вашем посте нет никаких доказательств. Возможно, решение состоит в том, чтобы исправить индексирование и открыть файл в текстовом режиме ... сложно сказать без дополнительной информации. – isedev
См. Http://www.w3.org/TR/xml/#sec-line-ends –
@isdev Индексатор, который я использую, открывает файл в режиме «rb», поэтому я искал решение, которое не требовали изменений там. Я уверен, что индексирование возможно в не двоичном режиме, но я надеялся, что туда не поеду. – Raceyman