0

機能の属性データのxmlを生成する必要がありますが、Arcviewライセンスしかないため、XMLのエクスポートツールを使用できません。私のオプションは何ですか?

ありがとう

4

1 に答える 1

1

Python には、必要なものがすべて標準ライブラリに含まれています。以下は、シェープファイル フィーチャクラスで検索カーソルを開き、選択したフィールドとその値を xml 要素にダンプするコードです。すべての行が終了すると、最上位の集約された要素が xml ファイルにダンプされます。10.1 でのみ利用可能な arcpy.da searchcursor を使用していることに注意してください。ただし、コードを簡単に変更して、通常の arcpy searchcursor (または updatecursor については updatecursor) で動作するようにすることができます。

#in some cases cElementTree won't be available, but it's lots faster,
#so get it if we can
try:
    import xml.etree.cElementTree as et
except ImportError:
    import xml.etree.ElementTree as et

import arcpy

def rows_as_dicts(cursor):
    '''
    Yields rows from passed Arcpy da cursor as dicts
    '''
    colnames = cursor.fields
    uc = hasattr(cursor, 'updateRow')
    for row in cursor:
        row_object = dict(zip(colnames, row))
        yield row_object
        if uc:
            cursor.updateRow([row_object[colname] for colname in colnames])

def dump2xml(row, stands, elelst):
    '''
    Builds the xml tree from the passed row dict
    '''

    # stand level creation
    stand = et.Element("stand")

    stand.set("tractid", row['TRACTID'])
    stand.set('stand', str(row['STAND']))

    # add field elements with their values
    for e in elelst:
        xele = et.SubElement(stand, e)
        xele.text = str(row[e])

    #add to top level stands element
    stands.append(stand)

def main():
    #establish top level element
    stands = et.Element("stands")

    #set fields to output to xml
    fields = ('MAPNAME ACRES TYP PROGRAM SI AGE YR').split()

    #get cursor going and make the xml elements
    fc = 'c:/arcview/sf/summerville/stand.shp'
    with arcpy.da.SearchCursor(fc, ['*']) as sc:
        for row in rows_as_dicts(sc):
            dump2xml(row, stands, fields)

    #throw the entire xml tree to a file        
    xmltree = et.ElementTree(stands)
    xmltree.write('c:/temp/stands.xml', encoding='UTF-8')

    return

if __name__ == '__main__':
    main()

頑張って、

マイク

于 2012-09-29T15:52:29.187 に答える