繁体   English   中英

如何使用python解析具有xmlns属性的xml

[英]How to parse the xml with xmlns attribute using python

<?xml version="1.0" ?>

<school xmlns="loyo:22:2.2">
    <profile>
        <student xmlns="loyo:5:542">
            <marks>
                <mark java="java:/lo">
                    <ca1>200</ca1>
                </mark>
            </marks>
        </student>
    </profile>
</school>

我试图访问ca1文本。 我正在使用etree,但无法访问它。 我正在使用下面的代码。

import xml.etree.ElementTree as ET
tree = ET.parse('mca.xml')
root = tree.getroot()

def getElementsData(xpath):
    elements = list()
    if root.findall(xpath):
        for elem in root.findall(xpath):
            elements.append(elem.text)
        return elements
    else:
        raise SystemExit("Invalid xpath provided")



t = getElementsData('.//ca1')
for i in t:
    print(i)

我尝试以其他方式访问它,但我不知道确切的问题。 录制文件类型有问题吗?

您的文档在学校节点和学生节点上都有名称空间,您需要在搜索中合并名称空间。 由于您要查找在student下的ca1 ,因此需要指定Student节点具有的名称空间:

import xml.etree.ElementTree as ET
tree = ET.parse('mca.xml')
root = tree.getroot()

def getElementsData(xpath, namespaces):
    elements = root.findall(xpath, namespaces)
    if elements == []:
        raise SystemExit("Invalid xpath provided")
    return elements


namespaces = {'ns_school': 'loyo:22:2.2', 'ns_student': 'loyo:5:542'}
elements = getElementsData('.//ns_student:ca1', namespaces)

for element in elements:
    print(element)

笔记

  • 由于您的名称空间没有名称,因此我给了它们诸如ns_schoolns_student之类的名称,但是这些名称可以是任何名称(例如ns1mystudent ,...)
  • 在更复杂的系统中,我建议引发其他类型的错误,并让调用方决定是否退出。

这样遍历如何

import xml.etree.ElementTree
e = xml.etree.ElementTree.parse('test.xml').getroot()
data = e.getchildren()[0].getchildren()[0].getchildren()[0].getchildren()[0].getchildren()[0].text
print(data)

试试下面的xpath

tree.xpath('//ca1//text()')[0].strip()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM