如何使用 Python 检查特定标签名称是否等于某个值以及 return 来自 XML 的标签内的全部数据

How to check if particular tag name equals a value and return the entire data inside the tag from XML using Python

我有一个 xml 结构如下:

<?xml version="1.0" ?>
<Parameters>
  <Test name="Login" browser="chrome">
    <TestParamerer version="1.2" timeout="480"/>
  </Test>
   <Test name="Logout" browser="chrome">
    <TestParamerer version="2.3" timeout="480"/>
    <Arguments name="EF" version="2.2"/>
  </Test>
</<Parameters>

我需要检索 Test with name="Login" 并 return Test 标记内 JSON 格式的整个值。我是 Python 的新手,非常感谢您的帮助。

您可以使用 etreejsonxmltodict

from lxml import etree
import json
import xmltodict

xml = """<?xml version="1.0" ?>
<Parameters>
  <Test name="Login" browser="chrome">
    <TestParamerer version="1.2" timeout="480"/>
  </Test>
   <Test name="Logout" browser="chrome">
    <TestParamerer version="2.3" timeout="480"/>
    <Arguments name="EF" version="2.2"/>
  </Test>
</Parameters>"""

tree = etree.fromstring(xml)
login = tree.findall('.//Test[@name="Login"]')
# [<Element Test at 0x29bc1ac7480>] (in this case 1 element). 
dict_from_xml = xmltodict.parse(etree.tostring(login[0]))
'''
OrderedDict([('Test',
              OrderedDict([('@name', 'Login'),
                           ('@browser', 'chrome'),
                           ('TestParamerer',
                            OrderedDict([('@version', '1.2'),
                                         ('@timeout', '480')]))]))])
'''
# And now to json':
js = json.dumps(dict_from_xml, indent=2)

print(js)
'''
{
  "Test": {
    "@name": "Login",
    "@browser": "chrome",
    "TestParamerer": {
      "@version": "1.2",
      "@timeout": "480"
    }
  }
}
'''