Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用etree追加多个元素,如何在新行中写入每个元素?_Python_Xml_Elementtree_Graphml - Fatal编程技术网

Python 用etree追加多个元素,如何在新行中写入每个元素?

Python 用etree追加多个元素,如何在新行中写入每个元素?,python,xml,elementtree,graphml,Python,Xml,Elementtree,Graphml,我正在使用Python和etree向graphml文件中的一些节点添加一些元素。我有两个字符串列表,其中包含一些要写入.graphml文件的数据。我已经设法做到了这一点,但当使用.append()函数时,它会将两个新元素写在同一行上。在同一个循环中写入这些新元素时,有没有一种好方法可以在它们之间获得行距 我有以下数据集: <?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdraw

我正在使用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>
使用以下代码将列表作为元素附加到数据集中:

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>

节点1
6.
20152011
我希望它的结构如下:

  <node id="node1">
  <data key="label">node1</data>
  <data key="degree">6</data>
  <data key="lastActive">2015</data>
  <data key="lastRelated">2011</data>
  </node>

节点1
6.
2015
2011

有人找到了解决方案吗?

您应该能够通过为新元素上的属性提供合适的值来获得所需的输出。
tail
是位于元素的结束标记之后、以下元素的开始标记之前的文本

...

thetail = "\n  "
lastRelated.tail = thetail
lastActive.tail = thetail

updatedText = etree.tostring(node)

...

我假设
\n
不起作用?我尝试过使用\n with:lastActive.set('\n key',lastActive'),当然这会导致新行从“它将进入
updatetext=etree.tostring(node)
,因为
file.write(updatetext)
\n
应该在的地方。因此,您必须附加每个元素,然后添加一行新行。或者,或者,或者,或者lxml可能有我正在寻找的解决方案,但我在安装lxml包时遇到问题。通过Pycharm安装时,出现以下错误:错误:b““xslt config”未被识别为内部或外部命令,\r\n不可操作的程序或批处理文件。\r\n“我已尝试从安装所有不同版本的lxml,并检查pip是否最新,但出现错误:“…whl在此平台上不受支持。有没有这方面的经验?看起来像是Windows的问题。转到并下载您的python版本的32位二进制文件(cp后的数字)。使用
pip
进行安装(如果您根本没有使用
pip
,请获取:()
pip安装lxml-3.6.4-cpXX-cpXXm-win32.whl
在同一目录下使用cmd或powershell或ming等进行安装。非常有用!谢谢!
...

thetail = "\n  "
lastRelated.tail = thetail
lastActive.tail = thetail

updatedText = etree.tostring(node)

...