ElementTree в Python 2.6.2, Обрабатывающем поддержку Инструкций?

Я предложил бы взглянуть на Erlang - это получало немного нажатия недавно, таким образом, некоторые ресурсы изучения превосходны. При использовании OO и/или процедурных языков Erlang определенно изогнет ум новыми и захватывающими способами.

Erlang является чистым функциональным языком с наземной поддержкой параллельных, распределенных и отказоустойчивых программ. Это имеет много интересных функций, включая то, что переменные не являются действительно переменными вообще - они не могут быть изменены когда-то объявленные и на самом деле лучше поняты как форма шаблона.

существует некоторый разговор вокруг блогосферы о создании сверху платформы Erlang (OTP) и поддержки машины других языков как Ruby - Erlang тогда стал бы своего рода виртуальной машиной для выполнения параллельных приложений, которые будут довольно захватывающей возможностью.

5
задан flxkid 29 September 2009 в 00:09
поделиться

3 ответа

Попробуйте библиотеку lxml : она следует API-интерфейсу ElementTree, плюс добавляет множество дополнительных функций. Из обзора совместимости :

ElementTree игнорирует комментарии и инструкции обработки при синтаксическом анализе XML, в то время как etree будет читать их и рассматривать как элементы Comment или ProcessingInstruction соответственно. Это особенно заметно, когда комментарии находятся внутри текстового содержимого, которое затем разделяется элементом Comment.

Вы можете отключить это поведение, передав логическое значение remove_comments и / или remove_pis аргументы ключевого слова для синтаксического анализатора, который вы используете. Для удобства и поддержки переносимого кода вы также можете использовать etree.ETCompatXMLParser вместо etree.XMLParser по умолчанию.

5
ответ дан 18 December 2019 в 13:16
поделиться

Yeah, I don't believe it's possible, sorry. ElementTree provides a simpler interface to (non-namespaced) element-centric XML processing than DOM, but the price for that is that it doesn't support the whole XML infoset.

There is no apparent way to represent the content that lives outside the root element (comments, PIs, the doctype and the XML declaration), and these are also discarded at parse time. (Aside: this appears to include any default attributes specified in the DTD internal subset, which makes ElementTree strictly-speaking a non-compliant XML processor.)

You can probably work around it by subclassing or monkey-patching the Python native ElementTree implementation's write() method to call _write on your extra PIs before _writeing the _root, but it could be a bit fragile.

If you need support for the full XML infoset, probably best stick with DOM.

2
ответ дан 18 December 2019 в 13:16
поделиться

I don't know much about ElementTree. But it is possible that you might be able to solve your problem using a library I wrote called "xe".

xe is a set of Python classes designed to make it easy to create structured XML. I haven't worked on it in a long time, for various reasons, but I'd be willing to help you if you have questions about it, or need bugs fixed.

It has the bare bones of support for things like processing instructions, and with a little bit of work I think it could do what you need. (When I started adding processing instructions, I didn't really understand them, and I didn't have any need for them, so the code is sort of half-baked.)

Take a look and see if it seems useful.

http://home.avvanta.com/~steveha/xe.html

Here's an example of using it:

import xe
doc = xe.XMLDoc()

prefs = xe.NestElement("prefs")
prefs.user_name = xe.TextElement("user_name")
prefs.paper = xe.NestElement("paper")
prefs.paper.width = xe.IntElement("width")
prefs.paper.height = xe.IntElement("height")

doc.root_element = prefs


prefs.user_name = "John Doe"
prefs.paper.width = 8
prefs.paper.height = 10

c = xe.Comment("this is a comment")
doc.top.append(c)

If you ran the above code and then ran print doc here is what you would get:

<?xml version="1.0" encoding="utf-8"?>
<!-- this is a comment -->
<prefs>
    <user_name>John Doe</user_name>
    <paper>
        <width>8</width>
        <height>10</height>
    </paper>
</prefs>

If you are interested in this but need some help, just let me know.

Good luck with your project.

1
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

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