Python 解析XML文件以根据子元素检索父元素

Python 解析XML文件以根据子元素检索父元素,python,xml-parsing,Python,Xml Parsing,我想解析一个xml文件,这是我的xml文件: <group> <name>Services</name> <file> <name>Path\File1.c</name> </file> <file> <name>Path\File2.c</name> <excluded> <configuration>

我想解析一个xml文件,这是我的xml文件:

<group>
  <name>Services</name>
  <file>
    <name>Path\File1.c</name>
  </file>
  <file>
    <name>Path\File2.c</name>
    <excluded>
      <configuration>Configuration1</configuration>
      <configuration>Configuration2</configuration>
    </excluded>
  </file>
  <file>
    <name>Path\File3.c</name>
    <excluded>
      <configuration>Configuration2</configuration>
      <configuration>Configuration3</configuration>
    </excluded>
  </file>
  <file>
    <name>Path\File4.c</name>
  </file>
</group>

如果当前配置不包括此文件,我不知道如何继续检查每个文件

我不确定你到底想做什么,但也许这段代码可以帮助你

from lxml import etree

def getSourceFile(sTree, szConfigName):
#retrieve every file used in the project
lSource = []
for data in sTree.xpath('/group'):
  file = data.findall("file")
  for x in file:
    myName = ""
    confIsExcluded=False
    for element in x:
      if(element.tag == "name"):
        myName = element.text
      if(element.tag == "excluded"):
        configurations = [config.text for config in element.findall("configuration")]
        if(szConfigName in configurations):
          confIsExcluded=True
    if(not confIsExcluded):
      lSource.append(myName)
print(lSource)

if __name__ == '__main__':
  sTree = etree.parse("myXmlFile.xml")
  lConfigName = ["Configuration1", "Configuration1", "Configuration2", "Configuration3"]

  for iIdxConfig in range(0, len(lConfigName)):
  getSourceFile(sTree, lConfigName[iIdxConfig])
  print("\n\n")

显示您的预期结果为什么在
lConfigName
中存在
“Configuration1”
两次?我指的是从Configuration1到configuration4。预期结果是:['File1',File3',File4']#对于配置1,['File1',File4']#对于配置2,['File1',File2',File4']#对于配置3,['File1',File2',File3',File4']#对于配置4,谢谢,请注意,我编辑了列表lConfigName,其中有一个错误,并在Configuration1中写入了两次,而不是从Configuration1到Configuration4
from lxml import etree

def getSourceFile(sTree, szConfigName):
#retrieve every file used in the project
lSource = []
for data in sTree.xpath('/group'):
  file = data.findall("file")
  for x in file:
    myName = ""
    confIsExcluded=False
    for element in x:
      if(element.tag == "name"):
        myName = element.text
      if(element.tag == "excluded"):
        configurations = [config.text for config in element.findall("configuration")]
        if(szConfigName in configurations):
          confIsExcluded=True
    if(not confIsExcluded):
      lSource.append(myName)
print(lSource)

if __name__ == '__main__':
  sTree = etree.parse("myXmlFile.xml")
  lConfigName = ["Configuration1", "Configuration1", "Configuration2", "Configuration3"]

  for iIdxConfig in range(0, len(lConfigName)):
  getSourceFile(sTree, lConfigName[iIdxConfig])
  print("\n\n")