Python Forum
[pykml] "AttributeError: 'lxml.etree._ElementTree' object has no attribute 'Document'
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[pykml] "AttributeError: 'lxml.etree._ElementTree' object has no attribute 'Document'
#1
Hello,

I'm getting started with pykml to read/edit KML files, and am stuck right at the beginning with this error:

import lxml
from pykml import parser

"""
dummy.kml:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
  <Document>
    <name>KML Samples</name>
    <open>1</open>
    etc.
"""    

doc=None
with open('dummy.kml') as f:
	doc = parser.parse(f)

print(doc.Document.name)
"""
d:\>Read.KML.py
Traceback (most recent call last):
  File "D:\Read.KML.py", line 15, in <module>
    print(doc.Document.name)
AttributeError: 'lxml.etree._ElementTree' object has no attribute 'Document'
"""
Am I missing something to keep pykml/lxml happy?

Thank you.
Reply
#2
You are reading from file now,Document attribute is only in use when read from string.
Do print(dir(doc)) to see what attributes you can use with doc....
Reply
#3
Thanks.

The problem I have is that pykml's documentation zeroes in on creating KML files, but has virtually nothing about reading/editing existing files.

from os import path

kml_file = path.join( \
      '../src/pykml/test', \
      'testfiles/google_kml_developers_guide', \
      'complete_tour_example.kml')

with open(kml_file) as f:
      doc = parser.parse(f)
I'll read up on lxml, which pykml depends on.

---
Edit: Here's some working code:

import lxml
#import pykml
from pykml import parser

doc=None
with open('dummy.kml') as f:
	doc = parser.parse(f).getroot()

for e in doc.Document.Folder.Placemark:
  coor = e.LineString.coordinates.text.split(',')
  print(coor)
Reply
#4
And here's how to read coordinates from a single Placemark section in a bigger KML file, and build a smaller file with just that part:

from pykml import parser
from lxml import etree
from pykml.factory import KML_ElementMaker as KML

with open('input.kml') as f:
	tree = parser.parse(f)
root = tree.getroot()
coords = root.Document.Folder.Placemark.LineString.coordinates

doc = KML.kml(
    KML.Placemark(
        KML.name("test"),
        KML.Style(KML.LineStyle(KML.color("FF0000FF"))),
        KML.LineString(
            KML.coordinates(coords)
        )
    )
)

outfile = open('output.kml','wb')
outfile.write(etree.tostring(doc, pretty_print=True))
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  getpass.getpass() results in AttributeError: module 'os' has no attribute 'O_NOCTTY' EarthAndMoon 4 783 Oct-03-2023, 02:00 PM
Last Post: deanhystad
  AttributeError: '_tkinter.tkapp' object has no attribute 'username' Konstantin23 4 1,724 Aug-04-2023, 12:41 PM
Last Post: Konstantin23
  Python: Regex is not good for re.search (AttributeError: 'NoneType' object has no att Melcu54 9 1,510 Jun-28-2023, 11:13 AM
Last Post: Melcu54
  Parallel processing - AttributeError: Can't get attribute 'sktimekmeans' Mohana1983 1 762 Jun-22-2023, 02:33 AM
Last Post: woooee
  Python: AttributeError: 'PageObject' object has no attribute 'extract_images' Melcu54 2 3,912 Jun-18-2023, 07:47 PM
Last Post: Melcu54
  Object attribute behavior different in 2 scripts db042190 1 745 Jun-14-2023, 12:37 PM
Last Post: deanhystad
  xml file editing with lxml.etree FlavioBueno 2 683 Jun-09-2023, 02:00 PM
Last Post: FlavioBueno
  cx_oracle Error - AttributeError: 'function' object has no attribute 'cursor' birajdarmm 1 2,378 Apr-15-2023, 05:17 PM
Last Post: deanhystad
  Pandas AttributeError: 'DataFrame' object has no attribute 'concat' Sameer33 5 5,655 Feb-17-2023, 06:01 PM
Last Post: Sameer33
  WebDriver' object has no attribute 'find_element_by_css_selector rickadams 3 5,924 Sep-19-2022, 06:11 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020