2017-02-07 18 views
0

私は以下のXML構造を持っていますが、それぞれのテストケースIDに基づいてtestsuiteタグ属性 "name"を取得したいと思います。Pythonでminidomライブラリを使って子ノードから親ノード属性を取得する方法

サンプル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?&quot;"> 
    <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テストケースinternalidと「党マネージャ」で、親テストスイート名、およびテストケースinternalidを取得したいと思いは307885であり、「新規注文を返す必要があります"テストスイート名として。したがって、直近の親ノード名属性を返す必要があります。どうすればこれを達成できますか?

答えて

0

ここでは、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 
0

minidomが必要ですか?

ドキュメントから:すでにDOMと熟練していない

ユーザーは、自分のXML処理の代わりに ためxml.etree.ElementTreeモジュールを使用して を検討すべきです。

したがって、minidomでは不可能と思われます。

残念ながら、xml.etree.ElementTreeには、親から要素を取得するための標準ツールはありません。しかし、あなたはあなたの要素を繰り返し処理することができ、ネストされたリスト(要素)とdicts(属性)のような単純なXMLを持つ純粋なPythonで必要なことを何でもします。

最も簡単な解決策は、特定の名前と属性を持つ希望のelemをすばやく見つけるために、の方法と完全なXPath言語サポートを提供するサードパーティのライブラリです。

良い公式チュートリアルに基づいてこれらから何かを試してみてください。 GL!

関連する問題