2016-04-07 31 views
0

私は、XML変数の呼び出しを容易にするために、Untangleライブラリ(https://untangle.readthedocs.org/en/latest/#)を使用してPythonを使いこなしています。同じ名前を持つ複数のxml見出しがある場合(以下のXML例のように)以外は、まったくわかりません。 Perlでは、以下のサンプルスクリプトのようなものを使ってXMLファイルを簡単に解析できます。私は、この例のような1行を使用して、特定のXML変数を取得したいと考えています。すなわち、名前属性を子として使用する。私はUntangleがこれをPythonでやっていると思っていますが、私はまだそれを理解していません。アンヤングルを使用して名前空間を解析する方法

サンプルPerlスクリプト:

use XML::Simple; 
my $XML = "/my/file/path/untest.xml"; 

my $config = XMLin("$XML", keyattr => { child => 'name'},forcearray => ['child']); 

my $instance = 'child1'; 
my $things = $config->{child}->{$instance}->{thing}; 

print("the element: $things\n"); 

サンプルXMLファイル:

<root> 
    <child name="child1"> 
     <thing>1</thing> 
    </child> 
    <child name="child2"> 
     <thing>2</thing> 
    </child> 
</root> 

編集:編集したサンプルのPerlスクリプト。これはうまくいくはずです。

+1

[XML :: Simple](http://p3rl.org/XML::Simple)と同じ方法であなた自身に警告することはできませんか? – choroba

+1

これらは名前空間ではありません。それらは同じ名前の通常の要素(デフォルトの名前空間内)です – Borodin

答えて

0

XML文書の同じレベルに同じ名前の要素が複数ある場合、そのオブジェクト属性の値はリストになります。これはあなたの質問のデータにこのようにアクセスできることを意味します。

xml = untangle.parse(xml_file) 

for child in xml.root.child: 
    print "Name: %s" % child['name'] 
    print "Thing: %s" % child.thing 
+0

リスト内のループではなく、1行でこれを行う方法はありますか?例:$ config - > {子} - > {$インスタンス} - > {物}; – stimps

+0

いいえ、これは単一の 'child'要素の詳細しか表示できないためです。あなたがそこから自分でそれを動かすことができないなら、あなたはあなたの質問に*正確に*あなたが望む出力を入れなければなりません – Borodin

関連する問題