Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.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
在python3中使用多个函数编写xml元素_Python_Xml_Python 3.x_Function - Fatal编程技术网

在python3中使用多个函数编写xml元素

在python3中使用多个函数编写xml元素,python,xml,python-3.x,function,Python,Xml,Python 3.x,Function,我需要在一个xml文件中写入一组元素,每两个元素都应该是空的,所以为了使代码更紧凑,我想我应该创建一个函数来写出空元素。当然,我不能生成这样的代码: def makeOne(): table=etree.SubElement(tables,'table') values = etree.SubElement(table,'values') 稍后在实际输入值的函数中调用它,因为我收集的文件没有加载到该函数中。我可能错了。我没有做太多Python,所以我不知道是否有更优雅的方法来处理这

我需要在一个xml文件中写入一组元素,每两个元素都应该是空的,所以为了使代码更紧凑,我想我应该创建一个函数来写出空元素。当然,我不能生成这样的代码:

def makeOne():
   table=etree.SubElement(tables,'table')
   values = etree.SubElement(table,'values')
稍后在实际输入值的函数中调用它,因为我收集的文件没有加载到该函数中。我可能错了。我没有做太多Python,所以我不知道是否有更优雅的方法来处理这个问题。为了清楚起见,这就是我的想法

def writeVals():
   tree = etree.parse('singleprog') 
   root = tree.getroot()
   tables = etree.SubElement(korjen[0], 'tables')
   makeOne()

我知道我想看到这里发生的事情很清楚,问题是我不能把这两个子元素放在writeVals()函数中,因为我需要在随机的地方使用这段代码大约30次。

这并不是真正的答案,但你也可以使用library,这是一种很棒的工厂方法:

from lxml import etree
from lxml.builder import E

table = E.table(E.values)

etree.dump(table)
您将获得:

<table>
  <values/>
</table>
您将获得:

<table>
  <values>one</values>
  <values>two</values>
  <values>there</values>
</table>

一
二
那里
lxml简介:

lxml工具包是C库libxml2libxslt的Python绑定。它的独特之处在于它将这些库的速度和XML功能完整性与本机Python API的简单性结合在一起,本机Python API主要兼容,但优于著名的ElementTreeAPI。最新版本适用于从2.6到3.6的所有CPython版本。有关lxml项目的背景和目标的更多信息,请参见简介。常见问题解答中回答了一些常见问题


你能把
表格
作为参数传递给
makeOne
吗?天哪,是的。谢谢你,汤姆!真傻,我有时怎么也看不见东西
makeOne(tables)
工作起来很有魅力。出于某种原因,我告诉自己我不使用lxml就可以做到这一点,但我必须考虑实现它。它可以与ElementTree互换使用吗?此外,我意识到我的问题更多的是使用函数而不是ET。参见lxml简介:
<table>
  <values>one</values>
  <values>two</values>
  <values>there</values>
</table>