Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果python在给定列表中出现另一个属性,如何提取XML属性?_Python_Xml_Pandas_Xml Parsing_Elementtree - Fatal编程技术网

如果python在给定列表中出现另一个属性,如何提取XML属性?

如果python在给定列表中出现另一个属性,如何提取XML属性?,python,xml,pandas,xml-parsing,elementtree,Python,Xml,Pandas,Xml Parsing,Elementtree,我有一个linkId的列表 links_o_i = [652518, 345004, 225317, 177396, 551734] 此外,我还有一个XML文件,其结构如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE facilities SYSTEM "http://www.matsim.org/files/dtd/facilities_v1.dtd"> <facilities name="Facilit

我有一个
linkId
的列表

links_o_i = [652518,  345004, 225317, 177396, 551734]
此外,我还有一个XML文件,其结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facilities SYSTEM "http://www.matsim.org/files/dtd/facilities_v1.dtd">
<facilities name="Facilities from different sources">

<!-- ====================================================================== -->

    <facility id="10002" linkId="666355" x="2684102.0" y="1253168.0">
        <activity type="other">
        </activity>

        <activity type="work">
        </activity>

    </facility>

<!-- ====================================================================== -->

    <facility id="10007" linkId="961312" x="2683486.0" y="1247853.0">
        <activity type="other">
        </activity>

        <activity type="work">
        </activity>

    </facility>

<!-- ====================================================================== -->

    <facility id="100070" linkId="652518" x="2684238.0" y="1246568.0">
        <activity type="leisure">
        </activity>

        <activity type="other">
        </activity>

        <activity type="work">
        </activity>

    </facility>

<!-- ====================================================================== -->

    <facility id="100071" linkId="1063278" x="2689220.0" y="1243493.0">
        <activity type="leisure">
        </activity>

        <activity type="other">
        </activity>

        <activity type="work">
        </activity>

    </facility>

<!-- ====================================================================== -->

    <facility id="100072" linkId="786540" x="2680812.0" y="1249375.0">
        <activity type="leisure">
        </activity>

        <activity type="other">
        </activity>

        <activity type="work">
        </activity>

    </facility>

<!-- ====================================================================== -->

    <facility id="100073" linkId="225317" x="2681506.0" y="1249508.0">
        <activity type="other">
        </activity>

        <activity type="shop">
        </activity>

        <activity type="work">
        </activity>

    </facility>

</facilities>

您可以使用将数据解析为dict格式,并提取ur数据:

extract = [{k:v for k,v in ent.items() if k in ['@linkId','@x','@y']}
           for ent in xmltodict.parse(data)['facilities']['facility']]

#filter for only entries in the list
res = [ent for ent in extract if int(ent['@linkId']) in links_o_i]

#read into dataframe
pd.DataFrame(res)

     @linkId    @x          @y
0   652518  2684238.0   1246568.0
1   225317  2681506.0   1249508.0

和蔼可亲!谢谢。比我的方法简单多了
extract = [{k:v for k,v in ent.items() if k in ['@linkId','@x','@y']}
           for ent in xmltodict.parse(data)['facilities']['facility']]

#filter for only entries in the list
res = [ent for ent in extract if int(ent['@linkId']) in links_o_i]

#read into dataframe
pd.DataFrame(res)

     @linkId    @x          @y
0   652518  2684238.0   1246568.0
1   225317  2681506.0   1249508.0