5

lxmlとPythonを使用してXMLファイルを作成する必要があります。

ただし、を使用classしてこれを実行するのか、関数を使用するのかがわかりません。重要なのは、私が適切なソフトウェアを開発するのはこれが初めてであり、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これを解決する唯一の方法を使用していますか?もしそうなら、これを達成する方法についていくつかの指針を教えていただけますか?

4

1 に答える 1

3

次のコードが機能します。

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

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

print etree.tostring(root)

関数ではなくクラスを使用することは、主にクラスのインスタンスで状態を維持することと関係があります (状態を維持する必要がない場合、クラスが意味をなすユースケースはほとんどありません)。これは問題とは何の関係もありません。コードが示すように、あなたの問題は単に、呼び出しから返された要素に名前をバインドしていなかったため、関数の残りの部分でSubElementその要素をさらに操作できなかったことです (たとえば、その属性を設定することによって)。text

于 2010-05-23T17:16:33.813 に答える