可重复的xml块分离

2024-10-04 01:36:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要xml方面的帮助 我以前也有

<data>
    <slib>
        <ime>CGDEV</ime>
        <isolated>true</isolated>
        <libclass>"/solr_lib"</libclass>
        **<cluster>cluster1</cluster>
        <server></server>
        <node></node>**
    </slib>

    <slib>
        <ime>MDB</ime>
        <isolated>false</isolated>
        <libclass>"-1.2.51.jar"</libclass>
        **<cluster></cluster>
        <server></server>
        <node>node1</node>**
    </slib>
</data>

我用那个属性在服务器上创建东西。。。 我把它们放在数组中,一个接一个地创建

def create_shlib():
    for i in range(x):
        if Arrayserver[i] != None and Arraynode[i] != None:
            server1=Arrayserver[i]
            nodee=Arraynode[i]
            server_id = AdminConfig.getid('/Node:'+nodee+'/Server:'+server1+'/')
        elif Arraynode[i] != None:
            nodee=Arraynode[i]
            server_id=AdminConfig.getid('/Node:'+nodee+'/')
        else:
            cluster=Arraycluster[i]
            server_id = AdminConfig.getid('/Cell:'+slib_cell+'/ServerCluster:'+cluster+'/')
            
        AdminConfig.create('Library', 
                        server_id,
                        [
                         ['name', Arrayime[i]],
                         ['isolatedClassLoader', Arrayisolated[i]],
                         ['description','Vestigo-shared_library'],
                         ['classPath', Arrayclass[i]]
                        ]
    )

现在我需要将集群、服务器、节点与属性分离 它看起来像这样

<scope>
    <id>1</id>
    <cluster>cluster1</cluster>
    <server></server>
    <node></node>
    
    <slib>
        <ime>CGDEV1</ime>
        <isolated>true1</isolated>
        <libclass>lr_lib1"</libclass>
    </slib>
    
    <slib>
        <ime>CGDEV2</ime>
        <isolated>true2</isolated>
        <libclass>r_lib2"</libclass>
    </slib>
</scope>

<scope>
    <id>2</id>
    <cluster></cluster>
    <server>trx01</server>
    <node>node01</node>
    <slib>
        <ime>CGDEV11</ime>
        <isolated>true1</isolated>
        <libclass>"r_lib1"</libclass>
    </slib>
    
    <slib>
        <ime>CGDEV22</ime>
        <isolated>true2</isolated>
        <libclass>olr_lib2"</libclass>
    </slib>
</scope>

</data>

正如您所看到的,每个作用域都有自己的属性

如何在分离后使用此xml块进行操作

我需要取一个作用域,他的所有属性,将其传递给数组并创建。 在我需要第二个作用域之后,我需要它的属性并将其传递给数组。 我应该使用哪些xml操作。 我以前用过

isolated = root.findall('slib/isolated')
for c in isolated:
    Arrayisolated.append(c.text)

这很容易,因为他们一个接一个地井然有序


Tags: idnodedata属性serverxmlscopecluster
1条回答
网友
1楼 · 发布于 2024-10-04 01:36:08

下面

import xml.etree.ElementTree as ET

xml = '''<data><scope>
    <id>1</id>
    <cluster>cluster1</cluster>
    <server></server>
    <node></node>
    
    <slib>
        <ime>CGDEV1</ime>
        <isolated>true1</isolated>
        <libclass>lr_lib1"</libclass>
    </slib>
    
    <slib>
        <ime>CGDEV2</ime>
        <isolated>true2</isolated>
        <libclass>r_lib2"</libclass>
    </slib>
</scope>

<scope>
    <id>2</id>
    <cluster></cluster>
    <server>trx01</server>
    <node>node01</node>
    <slib>
        <ime>CGDEV11</ime>
        <isolated>true1</isolated>
        <libclass>"r_lib1"</libclass>
    </slib>
    
    <slib>
        <ime>CGDEV22</ime>
        <isolated>true2</isolated>
        <libclass>olr_lib2"</libclass>
    </slib>
</scope>

</data>'''

root = ET.fromstring(xml)
scopes = root.findall('.//scope')
for scope in scopes:
    print(scope)
    slibs = scope.findall('.//slib')
    for slib in slibs:
        print('\t' + slib.find('isolated').text)

输出

<Element 'scope' at 0x7f70c78dcb10>
    true1
    true2
<Element 'scope' at 0x7f70c78e50d0>
    true1
    true2

相关问题 更多 >