如何使用另一个标记属性映射 XML 标记?

Posted

技术标签:

【中文标题】如何使用另一个标记属性映射 XML 标记?【英文标题】:How to map an XML tag by using another tag attribute? 【发布时间】:2021-06-07 02:32:57 【问题描述】:

我想映射一个 XML 标签。我想使用一个字符串来映射该标签。我试过了,只有过滤器直接写才能映射,不能用变量作为字符串来映射。

如果我用这种方式,它会返回空:

variablecode = "10.010"
ReadXML = ET.parse(XMLFile)
for drv in ReadXML.findall('.//desc[@code="variablecode"]/'):
   descname = drv.get('name')
   print(descname)

但如果我使用这种方式,它会返回名称:

variablecode = "10.010"
ReadXML = ET.parse(XMLFile)
for drv in ReadXML.findall('.//desc[@code="10.010"]/'):
   descname = drv.get('name')
   print(descname)

这是我的 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="10.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>

但我的期望是我不想直接写代码,我需要使用变量,因为代码的值是由另一个进程定义的,所以我需要在变量中使用它。

【问题讨论】:

【参考方案1】:

很有可能你这样通过的时候

for drv in ReadXML.findall('.//desc[@code="variablecode"]/'):

它可能不是指变量的值,而只是指字符串variablecode,它当然不存在于您的.xml 文件中,因此返回空。 可以试试这样的吗?

for drv in ReadXML.findall('.//desc[@code=""]/'.format(variablecode)):

【讨论】:

是的!它完美地工作。谢谢哥们! @AzyCrw4282

以上是关于如何使用另一个标记属性映射 XML 标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 querySelector 在锚标记的 href 属性末尾定位哈希?

如何使用 bs4 或 lxml 在 Python 中找到 XML 标记的文本行?

如何访问嵌套 JSP 标记文件中的父属性?

XML 转换为其他 XML

在 XML 标记之间增加版本

如何使用 XSLT 从 XML 中删除元素标记