Adrian. Good afternoon. I did not realize it.
I, now, know. Thank you, Schimon On Thu, 19 Jun 2025 06:19:01 +0100 Adrian Bool <a...@logic.org.uk> wrote: > Hi Schimon, > > You've been using Python's built-in ElementTree implementation > (xml.etree.ElementTree). > > This mailing list, and Xavier's guidance, is for the "lxml" package > <https://lxml.de/>. > > So, ensure you've got lxml available within your project (e.g. "pip > install lxml") and then import with: > > import lxml.etree as ET > > This allows your code below to run. > > ...although lxml's tutorial <https://lxml.de/tutorial.html> includes > the package in the following manner: > > from lxml import etree > > If you import in this manner you'd need to update your code, changing > the "ET" references to "etree", so something like: > > from lxml import tree > > e_feed = etree.Element("feed") > e_feed.set("xmlns", "http://www.w3.org/2005/Atom") > xslt_reference = etree.ProcessingInstruction( > "xml-stylesheet", > "type=\"text/xml\" href=\"stylesheet.xsl\"") > e_feed.insert(0, xslt_reference) > > etree.tostring(etree.ElementTree(e_feed)) > > Cheers > > aid > > > On 18 Jun 2025, at 20:10, Schimon Jehudah via lxml - The Python XML > > Toolkit <lxml@python.org> wrote: > > > > Xavier. Good evening. > > > > I beg your pardon, > > > > Please kindly tell me from where did you import ET, as I receive > > this error after ecevuting ET.tostring(ET.ElementTree(e_feed)). > > > > AttributeError: 'ElementTree' object has no attribute 'tag' > > > > Regards, > > Schimon > > > > On Mon, 16 Jun 2025 08:04:01 +0200 > > Xavier Morel <x...@odoo.com> wrote: > > > >> On 14/06/25 20:33, Schimon Jehudah via lxml - The Python XML > >> Toolkit wrote:> Would it be sensible to allow a negative value: > >>> > >>> e_feed.insert(-1, xslt_reference) > >> > >> If you test this, you will find out that inserting at negative > >> indexes is already a valid operation: `insert(-x, el)` inserts at > >> index `x` *from the end*. > >> > >> This is the normal behaviour of indexing in Python. > >> > >> And if you were using lxml, which you are not (lxml and xml.etree > >> are different packages), what you request would already work if > >> you used the `addprevious` method: > >> > >>>>> e_feed = ET.Element("feed") > >>>>> e_feed.set("xmlns", "http://www.w3.org/2005/Atom") > >>>>> xslt_reference = ET.ProcessingInstruction( > >> ... "xml-stylesheet", > >> ... "type=\"text/xml\" href=\"stylesheet.xsl\"") > >>>>> > >>>>> ET.tostring(ET.ElementTree(e_feed)) > >> b'<feed xmlns="http://www.w3.org/2005/Atom"/>' > >>>>> e_feed.addprevious(xslt_reference) > >>>>> ET.tostring(ET.ElementTree(e_feed)) > >> b'<?xml-stylesheet type="text/xml" href="stylesheet.xsl"?><feed > >> xmlns="http://www.w3.org/2005/Atom"/>' > >> > >> The way you namespace the element is also very much a > >> serialization hack, you should create the element using a QName > >> tag or Clark's Notation. You can use `register_namespace` to force > >> the namespace prefix if you care: > >> > >>>>> doc1 = ET.Element('{foo}bar') > >>>>> doc2 = ET.Element(ET.QName('foo', 'bar')) > >>>>> ET.tostring(doc1), ET.tostring(doc2) > >> (b'<ns0:bar xmlns:ns0="foo" />', b'<ns0:bar xmlns:ns0="foo" />') > >>>>> ET.register_namespace('', 'foo') > >>>>> ET.tostring(doc1), ET.tostring(doc2) > >> (b'<bar xmlns="foo" />', b'<bar xmlns="foo" />') > >> > >> in lxml you can also use the nsmap feature: > >> > >>>>> etree.tostring(etree.Element('{foo}bar', nsmap={None: 'foo'})) > >>>>> > >> b'<bar xmlns="foo"/>' > > _______________________________________________ > > lxml - The Python XML Toolkit mailing list -- lxml@python.org > > To unsubscribe send an email to lxml-le...@python.org > > https://mail.python.org/mailman3//lists/lxml.python.org > > Member address: a...@logic.org.uk > _______________________________________________ lxml - The Python XML Toolkit mailing list -- lxml@python.org To unsubscribe send an email to lxml-le...@python.org https://mail.python.org/mailman3//lists/lxml.python.org Member address: arch...@mail-archive.com