如何使用untangle解析名称空间

时间:2016-04-07 20:11:11

标签: perl python-2.7 xml-parsing

我一直在使用Untangle库(https://untangle.readthedocs.org/en/latest/#)搞乱Python,以便更容易地调用XML变量。除非有多个共享相同名称的xml标题(如下面的示例XML中所示),否则对我来说非常简单。在Perl中,您可以使用类似下面的示例脚本来轻松地解析XML文件。我希望像这个例子一样使用一行来获取某个XML变量。即使用name属性作为孩子。我打赌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 个答案:

答案 0 :(得分:0)

如果XML文档中的同一级别有多个具有相同名称的元素,则该对象属性的值将为列表。这意味着您可以像这样访问问题中的数据

xml = untangle.parse(xml_file)

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