Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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
Python3-xml配置文件上的循环_Python_Xml_Python 3.x_Configuration - Fatal编程技术网

Python3-xml配置文件上的循环

Python3-xml配置文件上的循环,python,xml,python-3.x,configuration,Python,Xml,Python 3.x,Configuration,我想用xml构建具有键值的配置文件,并且可以循环键 例如,我有3个学生(id和姓名) 如何将其放在xml配置文件中,以便在python中检查是否有STxx键并获取值?请分享您迄今为止所做的工作。我尝试在文件中进行设置,然后使用您的代码查找student,如root=open('test.txt').read()但我遇到了错误AttributeError:'str'对象没有属性'findall'请参见此处如何将文件加载到XML文档中 import xml.etree.ElementTree a

我想用xml构建具有键值的配置文件,并且可以循环键

例如,我有3个学生(id和姓名)



如何将其放在xml配置文件中,以便在python中检查是否有STxx键并获取值?

请分享您迄今为止所做的工作。我尝试在文件
中进行设置,然后使用您的代码查找student,如
root=open('test.txt').read()
但我遇到了错误
AttributeError:'str'对象没有属性'findall'
请参见此处如何将文件加载到XML文档中
import xml.etree.ElementTree as ET

STUDENTS = [('ST1','Jhone'),('ST5','Pitter'),('ST77','Arik')]

def indent(elem, level=0):
    i = "\n" + level*"  "
    j = "\n" + (level-1)*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for subelem in elem:
            indent(subelem, level+1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = j
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = j
    return elem 

def find_student_by_id(doc,_id):
  arg = ".//student[@id='{}']".format(_id)
  return doc.findall(arg)

# build the XML document
root = ET.Element('students')
for student in STUDENTS:
    student_element = ET.SubElement(root, 'student')
    student_element.set('name',student[1])
    student_element.set('id',student[0])

# print the xml document
indent(root)
ET.dump(root)

# search the document by id
student = find_student_by_id(root,'ST1')
# found
print(student)
student = find_student_by_id(root,'ST111')
# not found
print(student)
import xml.etree.ElementTree as ET

STUDENTS = [('ST1','Jhone'),('ST5','Pitter'),('ST77','Arik')]

def indent(elem, level=0):
    i = "\n" + level*"  "
    j = "\n" + (level-1)*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for subelem in elem:
            indent(subelem, level+1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = j
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = j
    return elem 

def find_student_by_id(doc,_id):
  arg = ".//student[@id='{}']".format(_id)
  return doc.findall(arg)

# build the XML document
root = ET.Element('students')
for student in STUDENTS:
    student_element = ET.SubElement(root, 'student')
    student_element.set('name',student[1])
    student_element.set('id',student[0])

# print the xml document
indent(root)
ET.dump(root)

# search the document by id
student = find_student_by_id(root,'ST1')
# found
print(student)
student = find_student_by_id(root,'ST111')
# not found
print(student)