python - 对使用类或函数感到困惑 : Writing XML files using lxml and Python

标签 python lxml

我需要使用 lxml 和 Python 编写 XML 文件。

但是,我无法确定是使用 还是函数来执行此操作。重点是,这是我第一次开发合适的软件,决定在何处以及为何使用 class 仍然显得很神秘。

我将说明我的观点。

例如,考虑我为向 etree 根添加子元素而编写的以下基于函数的代码。

from lxml import etree

root = etree.Element('document')

def createSubElement(text, tagText = ""):
    etree.SubElement(root, text)
    # How do I do this: element.text = tagText

createSubElement('firstChild')
createSubElement('SecondChild')

正如预期的那样,输出是:

<document>
  <firstChild/>
  <SecondChild/>
</document>

但是正如您注意到的评论,我不知道如何使用这种方法设置文本变量。

使用 class 是解决这个问题的唯一方法吗?如果是的话,你能给我一些关于如何实现这一点的指导吗?

最佳答案

以下代码有效:

def createSubElement(text, tagText = ""):
    elem = etree.SubElement(root, text)
    elem.text = tagText

createSubElement('firstChild', 'first one')
createSubElement('SecondChild', 'second one')

print etree.tostring(root)

使用类而不是函数主要是为了在类的实例中保持状态(在极少数用例中,如果不需要状态保持,类就有意义),它具有与您的问题无关 - 如代码所示,您的问题只是您没有将任何名称绑定(bind)到 SubElement 调用返回的元素,因此您当然无法进一步操作该元素(例如,通过设置其 text 属性)在您的函数的其余部分。

关于python - 对使用类或函数感到困惑 : Writing XML files using lxml and Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892528/

相关文章:

python - 水平解析表

python - 使用 Ubuntu 自动启动 Python 脚本并在后台运行

python - 为什么Python的lxml.etree.SubElement是类方法而不是实例方法?

Python-是否有一个模块可以自动从网页上抓取文章的内容?

python - 如何在 Yosemite 上设置 lxml 和 pypy?

python - 解析带有 `pythons etree.iterparse()` 的巨大 xml 文件无法正常工作。代码有逻辑错误吗?

python - Windows - Cygwin - Vim - Python - 导入错误

python - 如何在 sqlalchemy for mysql 中的另一列之后添加一列?

python - 关于使用 ttk.Style() 的问题?

python-2.7 - 将 Xpath 与 lxml etree 一起使用时,列表无法序列化错误