使用ElementT获取XML元素时出现问题

2024-06-11 18:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python解析XML文档,这样我就可以对数据进行操作并写出一个新文件。我正在处理的完整文件是here,但这里有一个摘录:

<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="09-11-2013" NAME="FileMaker" VERSION="ProAdvanced 12.0v5"/>
    <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="All gigs 88-07.fmp12" RECORDS="746" TIMEFORMAT="h:mm:ss a"/>
    <METADATA>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Country" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Year" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="City" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="State" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Theater" TYPE="TEXT"/>
    </METADATA>
    <RESULTSET FOUND="746">
        <ROW MODID="3" RECORDID="32">
            <COL>
                <DATA/>
            </COL>
            <COL>
                <DATA>1996</DATA>
            </COL>
            <COL>
                <DATA>Pompano Beach</DATA>
            </COL>
            <COL>
                <DATA>FL</DATA>
            </COL>
            <COL>
                <DATA>First Presbyterian Church</DATA>
            </COL>
        </ROW>
        <ROW MODID="3" RECORDID="33">
            <COL>
                <DATA/>
            </COL>
            <COL>
                <DATA>1996</DATA>
            </COL>
            <COL>
                <DATA>Hilton Head</DATA>
            </COL>
            <COL>
                <DATA>SC</DATA>
            </COL>
            <COL>
                <DATA>Self Family Arts Center</DATA>
            </COL>
        </ROW>
        <!-- snip many more ROW elements -->
    </RESULTSET>
</FMPXMLRESULT>

最后,我想使用METADATA字段中的信息来解析RESULTSET中的列,但目前我在获取数据句柄时遇到了困难。下面是我试图获取METADATA元素的内容:

^{pr2}$

打印出来:

<Element '{http://www.filemaker.com/fmpxmlresult}FMPXMLRESULT' at 0x10f982cd0>
None

为什么metadata是空的?我是不是滥用了find()方法?在


Tags: 文件textnamehttpfielddatatypecol
1条回答
网友
1楼 · 发布于 2024-06-11 18:54:34

您需要处理名称空间。在

但是,由于只给定了一个默认名称空间,因此可以使用以下语法查找元素:

import xml.etree.ElementTree as ET

ns = 'http://www.filemaker.com/fmpxmlresult'

tree = ET.parse('giglist.xml')
root = tree.getroot()

metadata = root.find("{%s}METADATA" % ns)
print metadata  # prints <Element '{http://www.filemaker.com/fmpxmlresult}METADATA' at 0x103ccbe90>

以下是您可能希望看到的相关线程:


UPD(获取结果列表):

^{pr2}$

印刷品:

[
    {'City': 'Pompano Beach', 'Country': None, 'State': 'FL', 'Theater': 'First Presbyterian Church', 'Year': '1996'}, 
    {'City': 'Hilton Head', 'Country': None, 'State': 'SC', 'Theater': 'Self Family Arts Center', 'Year': '1996'}
]

相关问题 更多 >