Python-具有多个重复标签的xml提取

时间:2019-01-23 03:02:23

标签: python xml beautifulsoup

我正在尝试从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文件非常复杂,大约200万行,即使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。 因此,必须先隔离然后提取坐标。

有什么想法吗?

0 个答案:

没有答案