python中如何使用minidom库通过子节点获取父节点属性
How to get parent node attribute through child node using minidom library in python
我有以下 xml 结构,我想根据每个测试用例 ID 获取测试套件标签属性 "name"。
样本xml:
<?xml version="1.0" encoding="UTF-8"?>
<testsuite id="307849" name="Suppress Pending LOA" >
<node_order><![CDATA[13]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307850" name="Party Manager" >
<node_order><![CDATA[0]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307851" name="Set default of “On”">
<node_order><![CDATA[1]]></node_order>
<externalid><![CDATA[22994]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22994]]></fullexternalid>
</testcase>
<testcase internalid="307858" name="Verify (LOA) workflow?"">
<node_order><![CDATA[2]]></node_order>
<externalid><![CDATA[22995]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22995]]></fullexternalid>
</testcase>
</testsuite>
<testsuite id="307871" name="Provisioning User" >
<node_order><![CDATA[1]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307872" name="Set default of “On”">
<node_order><![CDATA[1]]></node_order>
<externalid><![CDATA[22998]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22998]]></fullexternalid>
</testcase>
<testcase internalid="307879" name="Verify Hover-over help text is?">
<node_order><![CDATA[2]]></node_order>
<externalid><![CDATA[22999]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22999]]></fullexternalid>
</testcase>
</testsuite>
<testsuite id="307882" name="SP Portal" >
<node_order><![CDATA[2]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307883" name="Orders" >
<node_order><![CDATA[3]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307884" name="New Orders" >
<node_order><![CDATA[2]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307885" name=" Numbers: “LOA Workflow?” is set">
<node_order><![CDATA[100]]></node_order>
<externalid><![CDATA[23000]]></externalid>
<fullexternalid><![CDATA[RLTOQA-23000]]></fullexternalid>
</testcase>
</testsuite>
</testsuite>
</testsuite>
</testsuite>
在上面的示例中,我想获取 307851 测试用例内部标识和父测试套件名称 "Party Manager",测试用例内部标识为 307885 并且应该 return "New Order" 作为测试套件名称。所以,它需要return直接父节点名称属性。我怎样才能做到这一点?
您确定需要minidom
吗?
来自文档:
Users who are not already proficient with the DOM should consider
using the xml.etree.ElementTree module for their XML processing
instead.
因此,minidom
似乎不可能。
不幸的是,xml.etree.ElementTree
也没有从元素获取父元素的标准工具。但是你可以迭代你的元素并在纯 python 中做任何你想做的事,让你 XML 像嵌套列表(元素)和字典(属性)一样简单。
最简单的解决方案 - 是使用 lxml
third-party 库,它提供 elem.getparent()
方法和完整的 XPath 语言支持以快速找到所需的 elem
具有特定名称和属性。
根据优秀的官方教程尝试这些内容。 GL!
这是一个使用 minidom 的例子。
test_cases = doc.getElementsByTagName("testcase")
for test_case in test_cases:
if test_case.getAttribute('internalid') == '307851':
suite_name = test_case.parentNode.getAttribute('name')
print suite_name
break
我有以下 xml 结构,我想根据每个测试用例 ID 获取测试套件标签属性 "name"。
样本xml:
<?xml version="1.0" encoding="UTF-8"?>
<testsuite id="307849" name="Suppress Pending LOA" >
<node_order><![CDATA[13]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307850" name="Party Manager" >
<node_order><![CDATA[0]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307851" name="Set default of “On”">
<node_order><![CDATA[1]]></node_order>
<externalid><![CDATA[22994]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22994]]></fullexternalid>
</testcase>
<testcase internalid="307858" name="Verify (LOA) workflow?"">
<node_order><![CDATA[2]]></node_order>
<externalid><![CDATA[22995]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22995]]></fullexternalid>
</testcase>
</testsuite>
<testsuite id="307871" name="Provisioning User" >
<node_order><![CDATA[1]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307872" name="Set default of “On”">
<node_order><![CDATA[1]]></node_order>
<externalid><![CDATA[22998]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22998]]></fullexternalid>
</testcase>
<testcase internalid="307879" name="Verify Hover-over help text is?">
<node_order><![CDATA[2]]></node_order>
<externalid><![CDATA[22999]]></externalid>
<fullexternalid><![CDATA[RLTOQA-22999]]></fullexternalid>
</testcase>
</testsuite>
<testsuite id="307882" name="SP Portal" >
<node_order><![CDATA[2]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307883" name="Orders" >
<node_order><![CDATA[3]]></node_order>
<details><![CDATA[]]></details>
<testsuite id="307884" name="New Orders" >
<node_order><![CDATA[2]]></node_order>
<details><![CDATA[]]></details>
<testcase internalid="307885" name=" Numbers: “LOA Workflow?” is set">
<node_order><![CDATA[100]]></node_order>
<externalid><![CDATA[23000]]></externalid>
<fullexternalid><![CDATA[RLTOQA-23000]]></fullexternalid>
</testcase>
</testsuite>
</testsuite>
</testsuite>
</testsuite>
在上面的示例中,我想获取 307851 测试用例内部标识和父测试套件名称 "Party Manager",测试用例内部标识为 307885 并且应该 return "New Order" 作为测试套件名称。所以,它需要return直接父节点名称属性。我怎样才能做到这一点?
您确定需要minidom
吗?
来自文档:
Users who are not already proficient with the DOM should consider using the xml.etree.ElementTree module for their XML processing instead.
因此,minidom
似乎不可能。
不幸的是,xml.etree.ElementTree
也没有从元素获取父元素的标准工具。但是你可以迭代你的元素并在纯 python 中做任何你想做的事,让你 XML 像嵌套列表(元素)和字典(属性)一样简单。
最简单的解决方案 - 是使用 lxml
third-party 库,它提供 elem.getparent()
方法和完整的 XPath 语言支持以快速找到所需的 elem
具有特定名称和属性。
根据优秀的官方教程尝试这些内容。 GL!
这是一个使用 minidom 的例子。
test_cases = doc.getElementsByTagName("testcase")
for test_case in test_cases:
if test_case.getAttribute('internalid') == '307851':
suite_name = test_case.parentNode.getAttribute('name')
print suite_name
break