用etree附加多个元素,如何在新行上写每个元素?
Appending multiple elements with etree, how to write each element on new line?
我正在使用 Python 和 etree 向 graphml 文件中的某些节点添加一些元素。我有两个字符串列表,其中包含一些我想写入 .graphml 文件的数据。我设法做到了这一点,但是当使用 .append() 函数时,它将两个新元素写入同一行。在同一个循环中写入这些新元素时,有没有一种好的方法可以在它们之间进行行分隔?
我有以下数据集:
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
</node>
<node id="node2">
<data key="label">node2</data>
<data key="degree">32</data>
</node>
<node id="node3">
<data key="label">node3</data>
<data key="degree">25</data>
</node>
</graphml>
和两个包含年份的列表:
lastActive["2013","2014","2015"]
lastRelated["2012","2014","2011"]
使用以下代码将列表附加为数据集中的元素:
for node in root:
#checks if correct node
for index, i in enumerate(nameOfNode):
if i == node[0].text:
#create and add lastRelated element
lastRelated = Element('data')
lastRelated.set('key', 'lastRelated')
node.append(lastRelated)
lastRelated.text = lastRelated[index]
#create and add lastActive element
lastActive = Element('data')
lastActive.set('key', 'lastActive')
node.append(lastActive)
lastActive.text = lastActive[index]
updatedText = etree.tostring(node)
#write to file
file = open('dataset.graphml', 'wb')
file.write(updatedText)
file.close()
结果如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data><data key="lastRelated">2011</data></node>
我希望它的结构如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data>
<data key="lastRelated">2011</data>
</node>
有人对此有解决方案吗?
您应该能够通过为新元素上的 tail
属性 提供合适的值来获得所需的输出。 tail
是元素结束标记之后和下一个元素开始标记之前的文本。
...
thetail = "\n "
lastRelated.tail = thetail
lastActive.tail = thetail
updatedText = etree.tostring(node)
...
我正在使用 Python 和 etree 向 graphml 文件中的某些节点添加一些元素。我有两个字符串列表,其中包含一些我想写入 .graphml 文件的数据。我设法做到了这一点,但是当使用 .append() 函数时,它将两个新元素写入同一行。在同一个循环中写入这些新元素时,有没有一种好的方法可以在它们之间进行行分隔?
我有以下数据集:
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
</node>
<node id="node2">
<data key="label">node2</data>
<data key="degree">32</data>
</node>
<node id="node3">
<data key="label">node3</data>
<data key="degree">25</data>
</node>
</graphml>
和两个包含年份的列表:
lastActive["2013","2014","2015"]
lastRelated["2012","2014","2011"]
使用以下代码将列表附加为数据集中的元素:
for node in root:
#checks if correct node
for index, i in enumerate(nameOfNode):
if i == node[0].text:
#create and add lastRelated element
lastRelated = Element('data')
lastRelated.set('key', 'lastRelated')
node.append(lastRelated)
lastRelated.text = lastRelated[index]
#create and add lastActive element
lastActive = Element('data')
lastActive.set('key', 'lastActive')
node.append(lastActive)
lastActive.text = lastActive[index]
updatedText = etree.tostring(node)
#write to file
file = open('dataset.graphml', 'wb')
file.write(updatedText)
file.close()
结果如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data><data key="lastRelated">2011</data></node>
我希望它的结构如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data>
<data key="lastRelated">2011</data>
</node>
有人对此有解决方案吗?
您应该能够通过为新元素上的 tail
属性 提供合适的值来获得所需的输出。 tail
是元素结束标记之后和下一个元素开始标记之前的文本。
...
thetail = "\n "
lastRelated.tail = thetail
lastActive.tail = thetail
updatedText = etree.tostring(node)
...