2

我正在尝试从 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)

那str最后就是去掉所有的()和[]只留下坐标。

但是实际的 xml 文件非常复杂,大约 2,000,000 行,即使 VS 也无法折叠每个部分,所以我从来没有真正清楚地了解它的结构。

例如,实际路径<Vertex> 是:

tree.xpath("./GeoModel/FeatureClasses/FeatureClass/GeoFeatureClass/Features/Feature/GeoFeature/Geometry/Shape/GeoTin/Vertices/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。因此,首先隔离然后提取坐标是必要的。

有任何想法吗?

4

0 回答 0