Я использую python 2.7 с lib ElementTree.получить пространства имен из xml с помощью python ElementTree
Я не могу использовать lxml lib.
Мне нужно получить пространства имен в строке namespace_string
. Чтобы заполнить словарь словарей.
мой XML:
<?xml version="1.0" encoding="UTF-8"?>
<AX_Bestandsdatenauszug
xmlns="http://www.adv-online.de/namespaces/adv/gid/6.0"
xmlns:adv="http://www.adv-online.de/namespaces/adv/gid/6.0"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:ows="http://www.opengis.net/ows"
xmlns:wfs="http://www.adv-online.de/namespaces/adv/gid/wfs"
xmlns:wfsext="http://www.adv-online.de/namespaces/adv/gid/wfsext"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ogc="http://www.adv-online.de/namespaces/adv/gid/ogc"
xsi:schemaLocation="http://www.adv-online.de/namespaces/adv/gid/6.0 NAS-Operationen.xsd">
<enthaelt>
<gml:featureMember>
<xmlstuff>....a lot of xml stuff....</xmlstuff>
</gml:featureMember>
</enthaelt>
</AX_Bestandsdatenauszug>
код:
import clr
import sys
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
import xml.etree.ElementTree as ET
from io import StringIO
xml="file.xml"
tree = ET.parse(xml)
root = tree.getroot()
my_schema = "namespace_string"
my_namespaces = dict([node for _, node in ET.iterparse(StringIO(my_schema), events=['start-ns'])])
Код для словаря из этого ответа: https://stackoverflow.com/a/37409050/7317684
I судимое namespace_string=root.tag
но поймите меня только = "{http://www.adv-online.de/namespaces/adv/gid/6.0} AX_Bestandsdatenau szug»
Найдено только LXML решения :(
Любая помощь будет здорово!
Thx для вашей помощи, но я получил значение «ValueError: write to closed file» в этой строке: 'my_namespaces = dict ([узел для _, узел в ET.iterparse (StringIO (xml_data), events = ['start -ns'])]) '. – Yuli
Теперь вы можете проверить отредактированный код, строка 'my_namespaces = dict ([узел для _, узел в ET.iterparse (StringIO (xml_data), events = ['start-ns'])])' должен находиться внутри с блок. – saurabhsuman4797
Такая же ошибка в той же строке появляется с кодонной в блоке. – Yuli