如何通过使用 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
我想通过匹配 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