文本追加到使用Python元素树库

问题描述:

我需要创建一个XML文件,这需要N作为一个来自用户的输入,看起来像这样的XML文件(这里,N = 3):文本追加到使用Python元素树库

<test name="test1">                 
    <parameter name="username" value="bhusriva1" /> 
    <classes> 
     <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 
<test name="test2"> 
    <parameter name="username" value="bhusriva2" /> 
    <classes> 
     <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 
<test name="test3"> 
    <parameter name="username" value="bhusriva3" /> 
    <classes> 
     <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 

所以,为了使这一点,我创建了下面的代码,如下图所示:

from xml.etree.ElementTree import ElementTree 
from xml.etree.ElementTree import Element 
import xml.etree.ElementTree as etree 

#Number of users to create: Edit this part 
N_users = 1 

#Counter to terminate the loop and ID's 
counter = 0 
usr_num = 1 

root = Element('test') 
root.text = '<parameter name="username" value="bhusriva1" />' 
tree = ElementTree(root) 
name = Element('classes') 
root.append(name) 
name.text = '\n<class name="bhuv.mllab.tests.DensityTest" />\n' 
root.set('name', 'test1') 
print(etree.tostring(root)) 
tree.write(open('create_users_multi_browser.xml', 'w')) 

while (N_users - 1) > counter: 
    counter = counter + 1 
    usr_num = usr_num + 1 
    root = Element('test') 
    temp1 = "<parameter name=" + "\"" + "username"+ "\"" + " value=" + "\"" + "bhusriva" + str(usr_num) + "\"" +" />" 
    root.text = temp1 
    tree = ElementTree(root) 
    name = Element('classes') 
    root.append(name) 
    name.text = '<class name="bhuv.mllab.tests.DensityTest" />' 
    temp2 = "test" + str(usr_num) 
    root.set('name', temp2) 
    print(etree.tostring(root)) 
    tree.write(open("create_users_multi_browser.xml", "a")) 

这里,为N_users = 1,代码工作正常,但对于N_users > 1,它给在Internet Explorer下面的输出:

<parameter name="username" value="bhusriva1" /> <class name="bhuv.mllab.tests.DensityTest" /> 

那么,在代码中需要纠正什么?有一些不同的库用法的全新代码对我来说也很好。

几个问题与您的代码。首先,如果您使用root.text,那么将<和>替换为字符串转义版本(& gt和& lt)。其次,你不必保持这么多的柜台。 Python直接为你做!如果我们解决这两个问题(我已经添加注释来解释这是怎么回事),并清理逻辑一点点,然后我们得到如下:

from xml.etree.ElementTree import Element 
from xml.etree.ElementTree import SubElement 
import xml.etree.ElementTree as etree 

# Number of users to create: Edit this part 
users = 3 

op = "" 
for i in xrange(1, users + 1): 
    # Create test element 
    root = Element('test') 
    root.set('name', 'test' + str(i)) 

    # Create parameter element 
    params = SubElement(root, 'parameter') 
    params.set('name' , 'username') 
    params.set('value', 'bhusriva' + str(i)) 

    # Create classes element 
    classes = SubElement(root, 'classes') 

    # Add class subelement 
    class_element = SubElement(classes, 'class') 
    class_element.set('name', 'bhuv.mllab.tests.DensityTest') 

    # Add output to string 
    op = op + etree.tostring(root) 

# Write output to file 
with open('create_users_multi_browser.xml', 'w') as f: 
    f.write(op) 

运行这给输出:

<test name="test1"> 
    <parameter name="username" value="bhusriva1" /> 
    <classes> 
    <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 
<test name="test2"> 
    <parameter name="username" value="bhusriva2" /> 
    <classes> 
    <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 
<test name="test3"> 
    <parameter name="username" value="bhusriva3" /> 
    <classes> 
    <class name="bhuv.mllab.tests.DensityTest" /> 
    </classes> 
</test> 

希望这有助于!