我开始玩弄Python,但在xml中遇到了麻烦
我试图编辑一个xml子元素,它可能是以一种不太传统的方式存储的,它有许多数字作为文本,更像是一个向量,所有子元素都命名为“double”,尽管它实际上是文本……然后我希望xml是
这是此类文件的一个示例
<simulation>
<element1>'A'</element1>
<element2>
<subelement1>
<double>1</double>
<double>2</double>
<double>3</double>
<double>4</double>
<double>5</double>
</subelement1>
<subelement2>
<double>1</double>
<double>2</double>
<double>3</double>
<double>4</double>
<double>5</double>
</subelement2>
</element2>
</simulation>
我想做的是更改subelement1中的所有子节点值,例如:10、20、30、40、50,最后有类似的内容:
<simulation>
<element1>'A'</element1>
<element2>
<subelement1>
<double>10</double>
<double>20</double>
<double>30</double>
<double>40</double>
<double>50</double>
</subelement1>
<subelement2>
<double>1</double>
<double>2</double>
<double>3</double>
<double>4</double>
<double>5</double>
</subelement2>
</element2>
</simulation>
可以通过以下方式访问我要更改的所有节点:
import xml.etree.ElementTree as ET
for elem in root:
for subelem in elem.findall('.//element1/double'):
print(subelem.attrib)
print(subelem.text)
这显示了我想要更改的数字(见下文),但我无法找到一种方法将它们更改为我需要的数字
{} 1 {} 2 {} 3 {} 4 {} 5
如果我尝试将其用作向量或类似的东西:
for elem in root:
for subelem in elem.findall('.//element1/double'):
subelem.text = [10,20,30,40,50]
print(subelem.text)
我最终没有替换,而是添加了信息,结果是:
{} 1 [10,20,30,40,50]
{} 2 [10,20,30,40,50]
{} 3 [10,20,30,40,50]
{} 4 [10,20,30,40,50]
{} 5 [10,20,30,40,50]
做这些改变的方法是什么?多谢各位
对元素的
text
属性的赋值将替换该值,而不会追加。您的测试代码中一定有错误您需要确保分配了一个字符串。ET将接受一个数字或一个列表,实际上是任何对象,但在稍后尝试序列化树时将崩溃。而且,在
findall
告诉它搜索整个子树之前,不需要枚举第一级元素印刷品
相关问题 更多 >
编程相关推荐