/ / Lxml грешка при парсиране на kml чрез pykml - python, parsing, lxml, kml

Lxml грешка при анализиране на kml използвайки pykml - python, parsing, lxml, kml

Опитвам се да анализирам kml файл, съдържащ множествомаркери с помощта на pykml. Искам да редактирам HTML кода в описанието на kml, главно за целите на визуализацията на географски данни в Google Земя. Изследвах много начини да го направя:

Въпреки това, аз винаги се LXML грешка, показана по-долу. :(

    Traceback (most recent call last):
File "C:UsersArellanoCopyBSGE2015-2016 SUMMERtrial7.py", line 5, in <module>
root = parser.fromstring(open("trim_KML.kml", "r").read())
File "C:Program Files (x86)Python2.7.10libsite-packagespykml-0.1.0-py2.7.eggpykmlparser.py", line 41, in fromstring
return objectify.fromstring(text)
File "src/lxml/lxml.objectify.pyx", line 1801, in lxml.objectify.fromstring (srclxmllxml.objectify.c:25171)
File "src/lxml/lxml.etree.pyx", line 3213, in lxml.etree.fromstring (srclxmllxml.etree.c:77697)
File "src/lxml/parser.pxi", line 1819, in lxml.etree._parseMemoryDocument (srclxmllxml.etree.c:116494)
File "src/lxml/parser.pxi", line 1707, in lxml.etree._parseDoc (srclxmllxml.etree.c:115144)
File "src/lxml/parser.pxi", line 1079, in lxml.etree._BaseParser._parseDoc (srclxmllxml.etree.c:109543)
File "src/lxml/parser.pxi", line 573, in lxml.etree._ParserContext._handleParseResultDoc (srclxmllxml.etree.c:103404)
File "src/lxml/parser.pxi", line 683, in lxml.etree._handleParseResult (srclxmllxml.etree.c:105058)
File "src/lxml/parser.pxi", line 613, in lxml.etree._raiseParseError (srclxmllxml.etree.c:103967)
XMLSyntaxError: Namespace prefix xsi for schemaLocation on Document is not defined, line 3, column 32

Ето моя кодов фрагмент: (който трябва да работи на базата на един от моите източници)

from pykml import parser

root = parser.fromstring(open("trim_KML.kml", "r").read())
print etree.tostring(root.Document.Placemark.LineString.Description)

Инсталирах pykml и lxml 3.6.0 и Im в момента използвам Python 2.7.10. Файлът kml съдържа редове. (км км връзка: https://sites.google.com/site/kmlhostingmwss/trim.kml) Също така имам Python 2.7 от моя ArcGIS 10.2.

Нов съм с работата с kml файлове. Може ли някой да ми каже какво правя погрешно? Или има по-лесен начин за редактиране на описанието на kml файлове? Благодаря ти много. :)))

Отговори:

1 за отговор № 1

Xml има някои проблеми, ако искате да премахнете грешката, добавете xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" към втория ред:

<kml  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">

След това използвайте lxml следните работи:

import lxml.etree as et

xml = et.parse("trim.kml").getroot()

print(xml.xpath("//kml:Document//kml:Placemark/kml:description", namespaces={"kml":xml.nsmap["kml"]}))

Което ви дава:

[<Element {http://www.opengis.net/kml/2.2}description at 0x7f612d0885f0>, <Element {http://www.opengis.net/kml/2.2}description at 0x7f612d088cb0>, <Element {http://www.opengis.net/kml/2.2}description at 0x7f612d088d40>, <Element {http://www.opengis.net/kml/2.2}description at 0x7f612d088d88>, <Element {http://www.opengis.net/kml/2.2}description at 0x7f612d088dd0>, <Element {http://www.opengis.net/kml/2.2}description at 0x7f612d088e18>]

Можете също да използвате lxml.html което ще работи по-добре с разбити XML, а самите данни също са 99% html.

Можете да получите или от вътрешността на document.placemark с:

from lxml import html
xml = html.parse("trim.kml")
print(xml.xpath("//placemark/description"))

Което ви дава:

[<Element description at 0x7f1c757fad08>, <Element description at 0x7f1c757fad60>, <Element description at 0x7f1c757fadb8>, <Element description at 0x7f1c757fae10>, <Element description at 0x7f1c757fae68>, <Element description at 0x7f1c757faec0>]