首页 > 解决方案 > 如何使用 Python 处理 XML 标记数组以获取每个对象?

问题描述

我有一个这样的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Country>
     <number no="2008" info="update">
          <string name="ruth" code="XX1" />
          <string name="amy" code="XX2" />
          <string name="lisa" code="XX3" />
          <string name="graham" code="XX4" />
          <!-- Working -->
          <detail name="man1" class="A1">
               <string name="ruth" code="1AV1"/>
               <string name="amy" code="1AV2"/>
          </detail>
          <detail name="man2" class="A2">
               <string name="lisa" code="2AV1"/>
               <string name="graham" code="2AV2"/>
          </detail>
     </number>
     <number no="2006" info="update">
          <string name="grace" code="XX5" />
          <string name="emy" code="XX6" />
          <string name="toms" code="XX7" />
          <!-- Working -->
          <detail name="woman1" class="B1">
               <string name="grace" />
          </detail>
          <detail name="woman2" class="B2">
               <string name="emy" code="2BV1"/>
               <string name="toms" />
          </detail>
     </number>
</Country>

我想通过映射名称大小来获取标签名称和代码的值。

这是我尝试过的,但没有完成并坚持下去。

ReadFile = ET.parse('test.xml')
codestring = 'B2'
nostring = '2008'
Name = ([nm.get("name")
               for nm in ReadFile.findall('.//detail[@class="{}"]/'.format(codestring))])
Code = ([cd.get("code")
               for cd in ReadFile.findall('.//detail[@class="{}"]/'.format(codestring))])

if len(Name) > 1 :
    message = "Name More Than One"
    if len(Code) < 1 :
        message = "code not specified"
        # I need to get the
        # get one of the code from here <string name="toms" code="XX7" />
        result = ["emy\2BV1" , "toms\XX7"] # this is my expected result. Im going to use each array to mapping a path in other process
elif len(Name) == 1 :
    message = "Name Is One"
else:
    message = "Name Not Found"

无论如何,我之前用powershell完成了这个过程。我是这样做的。

if (($DriverFileName).Count -gt 1)
{
     $Message = "Name More Than One"
     $maxLoop = [math]::Min($DriverFileName.Count, $DriverFileVersion.Count)

     for ($i = 0; $i -lt $maxLoop; $i++) {

          if (($DriverFileVersion[$i]).Count -lt 1)
          {
               $Message = "Version Not Specifiy"
               $DriverFileNameDefault = $DriverFileName[$i]
               $Default = (Select-Xml -Xml $ReadDriverXML -XPath "//family[@code='$DriverFamilyCode']/driver[@name='$DriverFileNameDefault']").Node.version
               $Path = '{0}\{1}' -f $DriverFileName[$i], $Default
          }
          elseif (($DriverFileVersion[$i]).Count -ge 1)
          {
               $Message = "Version Specified"
               $Path = '{0}\{1}' -f $DriverFileName[$i], $DriverFileVersion[$i]
          }
          else {

               if (Test-Path $DriversPath\$DriverFileVersion[$i]\*)
               {
                    $Message = "Version Can Not Query"
                    $Path = "$DriverFileName\*"
               }
               else {

                    $Message = "Version Unreachable"
               }
          }
          
          $InfFile = Get-ChildItem -Path $DriversPath\$Path\*.inf
     }
}

任何人都可以帮助我提供建议和帮助,非常感谢。太感谢了

标签: pythonxmlloopsmultidimensional-arrayextract

解决方案


推荐阅读