Pythonで、XMLファイルからノードの子要素を照会する方法を教えてください。 -- python フィールド と xml フィールド と parsing フィールド と hierarchy フィールド 関連 問題

How can I display the child element of a node from an xml file, in python?












0
vote

問題

日本語

これは私のXMLファイル

です。 <事前> <コード> <root> <Module name="ac4" offset="32" width="12"> <register name="xga_control" offset="0x000" width="32" access="R/W"> <field name="reserved" offset="0" bit_span="5"/> <field name="force_all_fault_clear" bit_span="1" default="0"> <description>Rising edge forces all fault registers to clear</description> </field> <field name="force_warning" default="0" bit_span="1"> <description>Forces AC2 to report a Master Warning</description> </field> <field name="force_error" default="0" bit_span="1"> <description>Forces AC2 to report a Master Error</description> </field> </register> </Module> <root>

今、私は私のレジスタの名前にアクセスして表示することができます。ただし、フィールド要素の名前と属性も表示します。どうやってやるの?これが私のコードです。

<事前> <コード> input_file = etree.parse('file1.xml') output=open("ac4.vhd","w+") output.write("Registers ") for node in input_file.iter(): if node.tag=="register": name=node.attrib.get("name") print(name) output.write(name) output.write(" ") if node.tag=="field": name=node.attrib.get("name") output.write(name)

今出力は

のように見えます <事前> <コード> Registers xga_control i_cmd_reg

私はそれが

のように見えてほしい <事前> <コード> Registers xga_control reserved force_all_fault_clear force_warning force_error i_cmd_reg field name field name

これを行う方法についてのアイデアは?

英語

Here is my xml file

<root>         <Module name="ac4" offset="32" width="12">             <register name="xga_control" offset="0x000" width="32" access="R/W">                  <field name="reserved" offset="0" bit_span="5"/>                  <field name="force_all_fault_clear" bit_span="1" default="0">                     <description>Rising edge forces all fault registers to clear</description>                 </field>                  <field name="force_warning" default="0" bit_span="1">                     <description>Forces AC2 to report a Master Warning</description>                 </field>                  <field name="force_error" default="0" bit_span="1">                    <description>Forces AC2 to report a Master Error</description>                 </field>             </register>          </Module>  <root> 

Right now I can access the names of my registers and display them. However I also want to display the names and attributes of my field elements. How can I do that? Here is my code so far.

input_file = etree.parse('file1.xml') output=open("ac4.vhd","w+")      output.write("Registers  ")     for node in input_file.iter():         if node.tag=="register":             name=node.attrib.get("name")             print(name)             output.write(name)             output.write(" ")             if node.tag=="field":                 name=node.attrib.get("name")                 output.write(name) 

Right now the output looks like

Registers  xga_control i_cmd_reg 

I want it to look like

Registers  xga_control     reserved                force_all_fault_clear     force_warning     force_error i_cmd_reg    field name    field name 

Any ideas on how to do this?

</div
           
 
 

回答リスト

1
 
vote
vote
ベストアンサー
 

input_file.iter() を繰り返すのではなく、 9988777667 を行うことができ、それ以上に体系的に繰り返すことができます。

これはあなたがあなたのコードを書く方法です:

<事前> <コード> import xml.etree.ElementTree as ET tree = ET.parse('file1.xml') root = tree.getroot() with open('ac4.vhd', 'w+') as fd: fd.write('Registers ') for node in root: if node.tag == 'Module': for sub_node in node: fd.write('{0} '.format(sub_node.get('name'))) for child in sub_node: fd.write(' {0} '.format(child.get('name')))

あなたの出力は次のようになります:

<事前> <コード> Registers xga_control reserved force_all_fault_clear force_warning force_error
 

Instead of iterating over input_file.iter() you can do input_file.getroot() and iterate systematically over that.

This is how you would write your code:

import xml.etree.ElementTree as ET                                                 tree = ET.parse('file1.xml')                                                       root = tree.getroot()                                                              with open('ac4.vhd', 'w+') as fd:                                                     fd.write('Registers ')                                                           for node in root:                                                                     if node.tag == 'Module':                                                              for sub_node in node:                                                                 fd.write('{0} '.format(sub_node.get('name')))                                    for child in sub_node:                                                                fd.write(' {0} '.format(child.get('name'))) 

Your output becomes:

Registers xga_control     reserved     force_all_fault_clear     force_warning     force_error 
</div
 
 
 
 

関連する質問

5  WordPress:投稿に階層を追加する方法  ( Wordpress how to add hierarchy to posts ) 
私は自分の本文を投稿できるWordPressプラットフォーム上のWebサイトを作成しています。だから私が欲しいのは、私が投稿を追加してから子供を追加する(チャプター)。私はこれを見つけました: <事前> <コード> register_post_type( 'p...

0  特定のノードの下のSQL階層内のすべてのリーフノードを選択する方法  ( How can i select all leaf nodes in a sql hierarchy under a given node ) 
カテゴリの階層をモデル化する一連のデータがあります。ルートカテゴリには、一連の最上位カテゴリが含まれています。各トップレベルのカテゴリには、一連のサブカテゴリが含まれています。 各サブカテゴリには、組織のセットがあります。特定の組織は複数のサブカテゴリに表示さ...

1  アルバムとそのメディアとサブアルバムとそのメディアを削除するための適切な方法  ( Proper way to delete album and its media and sub album and its media ) 
アルバム階層データをそのメディアで削除するための適切な方法があるでしょう。 ループを開始して、すべてのサブアルバムIDを見つけて検索し、そのアルバムIDに属するすべてのメディアを削除するように照会を作成してください。 データがたくさんあるかアルバムがユーザ...

0  MS CRM 4.0で階層を設定する方法  ( How to setup hierarchies in ms crm 4 0 ) 
MS CRM 4.0で階層を設定する必要があります。私は階層の4つのレベルを上記しました....販売代理店 - &gt;セールスマネージャー - &GT;エリアセールスマネージャー - &gt;地域事務所。販売エージェントの男は最低レベルの階層にあり、地域事...

3  階層内のノードを並べ替えるためのSQL  ( Sql to reorder nodes in a hierarchy ) 
隣接リストモデルを使用する「タスクリスト」データベース(下記参照)を持っているので、各「タスク」には無制限のサブタスクを持つことができます。テーブルには「TaskOrder」列があるため、すべてがTreeViewで正しい順序でレンダリングされます。 指定された...

2  後でプロセスを再構築するための非同期分散プロセスを計装するための良いパターン/練習?  ( Good pattern practice for instrumenting asynchronous distributed processes to re ) 
簡単に説明しています。プロセスに関する深い知識を持つデータ、またはそれぞれのアプリは、それらが大きいプロセスの一部であるという知識を持つためのデータ。 複数の分散アプリケーションにわたって非同期的に実行されるいくつかのビジネスプロセスがあります。これらのプロセ...

0  AHPファイルを構築する  ( Building ahp file ) 
AHP Rパッケージとの関連で自分のAHPの説明を構築しようとしています。 https://cran.r-project.org/ Web / Packages / Ahp / Vignettes / file-format.html 次のAHPを実行...

10  注釈付きAndroidクラス階層  ( Annotated android class hierarchy ) 
私の人生のために、私は「大きな絵」を見ることができません。私がAndroidについて何かを学んだと思うたびに、新しいクラスはいくつかのサンプル/例のコードでポップアップします。 TRUE、(TERS)正式なリファレンスを見ることができますが、追加情報が必要で...

3  タイプのリーフインターフェイスを取得する  ( Retrieving a types leaf interfaces ) 
system.type クラスを提供する getInterfaces ()メソッド ""メソッド "Interfacesが実装されているすべてのインターフェイスを取得します。現在のタイプによって継承されます。 問題は、「getInterfacesメソッドは、...

0  SpotFireのネストされたフィルタオプション  ( Nested filter options in spotfire ) 
Spotfireを使用してレポートを作成することを学びました。実現可能性を理解するのを手伝ってください。 前の選択に基づいてフィルタを変更することは可能です(前のセクションに基づいてフィルタを変更する必要があります) 例えば: 3列の次の表を持っています...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有