如何使用 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)
我试过用不同的方式访问它我不知道确切的问题。是录音文件类型问题吗?
这样遍历怎么样
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()
您的文档在节点 school 和 student 上有命名空间,您需要在搜索中合并这些命名空间。由于您要查找 ca1,它位于 student 下,因此您需要指定 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_school,ns_student,但这些名称可以是任何名称(例如 ns1、mystudent、...)
- 在更复杂的系统中,我建议提出一些其他类型的错误,让调用者决定是否退出。
<?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)
我试过用不同的方式访问它我不知道确切的问题。是录音文件类型问题吗?
这样遍历怎么样
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()
您的文档在节点 school 和 student 上有命名空间,您需要在搜索中合并这些命名空间。由于您要查找 ca1,它位于 student 下,因此您需要指定 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_school,ns_student,但这些名称可以是任何名称(例如 ns1、mystudent、...)
- 在更复杂的系统中,我建议提出一些其他类型的错误,让调用者决定是否退出。