如何通过使用 Python 匹配元素 XML 来查找特定属性?

How to find specific attribute by matching the element XML using Python?

我想通过匹配 XML 文件中的元素来查找特定属性。我的 XML 看起来像这样。

<Data>
     <family no="1309" description="date">
          <desc name="rt1" code="10.010" />
               <disk name="xsfdf" ver="9.11" />
               <disk name="jhgjt" ver="sryj" />
          </desc>
          <desc name="rt2" code="2210.9" />
               <disk name="kury" ver="45.11" />
               <disk name="jyd" ver="liud" />
          </desc>
     </family>
     <family no="2006" description="date">
          <desc name="rt3" code="16450.010" />
               <disk name="ytdts" ver="9.11" />
               <disk name="sj" ver="8346" />
          </desc>
          <desc name="rt5" code="165460.9" />
               <disk name="kgd" ver="65.11" />
               <disk name="asdr" ver="97.986" />
          </desc>
     </family>
</Data>

我想通过匹配code="10.010"的值得到name的值。在 powershell 中我这样试过:

$Code = "10.010"
$FileName = ($ReadXML.Data.family.desc | Where-Object {$_.code -like "*$Code*"}).disk.name
Write-Host "$FileName"

任何人都可以帮助我如何在 Python 中做到这一点。非常感谢您的帮助。非常感谢。

在这种情况下你最好使用 xpath:

$xml = [xml]'<Data>
     <family no="1309" description="date">
          <desc name="rt1" code="10.010" >
               <disk name="xsfdf" ver="9.11" />
               <disk name="jhgjt" ver="sryj" />
          </desc>
          <desc name="rt2" code="2210.9" >
               <disk name="kury" ver="45.11" />
               <disk name="jyd" ver="liud" />
          </desc>
     </family>
     <family no="2006" description="date">
          <desc name="rt3" code="16450.010" >
               <disk name="ytdts" ver="9.11" />
               <disk name="sj" ver="8346" />
          </desc>
          <desc name="rt5" code="165460.9" >
               <disk name="kgd" ver="65.11" />
               <disk name="asdr" ver="97.986" />
          </desc>
     </family>
</Data>'
#note that the xml in your question is not well formed; I fixed it above

$target = $xml | Select-Xml ".//desc[@code='10.010']/@name"
echo $target.ToString()

或使用python:

from lxml import etree
doc = etree.XML(data)
target = doc.xpath(".//desc[@code='10.010']/@name")[0]
print(target)

输出:

rt1

编辑:

target = doc.xpath(".//desc[@code='10.010']/disk/@name")[0]
print(target)

得到

xsfdf