Я пытаюсь извлечь некоторые координаты из XML-файла. Дело в том, что мой XML-файл имеет несколько одинаковых тегов, поэтому я не могу их правильно изолировать.
Скажем, xml-это что-то вроде этого:
<GeoFeature gml:id="0">
<Vertices>
<Vertex IndexNo="0" srsDimension="3">649277.148852 5142325.926182 -955.329113</Vertex>
<Vertex IndexNo="1" srsDimension="3">649262.401411 5142320.847273 -955.159828</Vertex>
<Vertex IndexNo="2" srsDimension="3">649271.562070 5142318.588838 -955.413264</Vertex>
<Vertex IndexNo="3" srsDimension="3">649273.811729 5142318.034215 -955.486051</Vertex>
</Vertices>
</GeoFeature gml:id="0">
<GeoFeature gml:id="1">
<Vertices>
<Vertex IndexNo="0" srsDimension="3">649277.148852 5142325.926182 -955.329113</Vertex>
<Vertex IndexNo="1" srsDimension="3">649262.401411 5142320.847273 -955.159828</Vertex>
<Vertex IndexNo="2" srsDimension="3">649271.562070 5142318.588838 -955.413264</Vertex>
<Vertex IndexNo="3" srsDimension="3">649273.811729 5142318.034215 -955.486051</Vertex>
</Vertices>
</GeoFeature gml:id="1">
тогда все, что мне нужно сделать, это очень просто
from bs4 import BeautifulSoup
soup = BeautifulSoup (open xml)
results = []
def get_data_vaule():
GeoFeatures=soup.find_all('GeoFeature')
for GeoFeature in GeoFeatures:
if GeoFeature['gml:id'] = 0:
vertexs=soup.find_all('Vertex')
for vertex in vertexs:
value=vertex.contents
for i in value:
str(i)
results.append(i)
эта строка в конце концов должна избавиться от всех () и [] оставить только координаты.
Но фактический XML-файл очень сложен, около 2 000 000 строк, даже VS не может сложить каждую часть, поэтому я никогда не получаю четкого представления о его структуре.
Например, фактический путь к <Vertex>
:
tree.xpath ( "./ Geomodel / FeatureClasses / FeatureClass / GeoFeatureClass / Свойства / Feature / GeoFeature / Геометрия / Форма / GeoTin / Вершины / Vertex")
Проблема в том, что есть несколько частей с gml:id="0"
и gml:id="1"
и т. Д.
Пока что я не могу найти какие-то определенные ярлыки, чтобы изолировать каждую часть.
И я должен их изолировать, потому что под <Vertex>
есть <Triangle>
, как это:
<Triangle IndexNo="9613">
<VertexList>5253 5426 5425</VertexList>
<NeighborList>9618 9934 9614</NeighborList>
</Triangle>
<VertexList>
начинается с 1 и сбрасывается на 1 в каждой части.
Таким образом, сначала нужно изолировать, а затем извлечь координату.
Есть идеи?