Python - извлечение xml с несколькими дублированными тегами - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь извлечь некоторые координаты из 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 в каждой части. Таким образом, сначала нужно изолировать, а затем извлечь координату.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...