次のコードのようなものを使用してみることができます。publish_parts
私が使用したメソッドを使用するのではなくpublish_doctree
、ドキュメントの疑似 XML 表現を取得します。次に、すべてのfield
要素を抽出するために XML DOM に変換しました。次に、各要素の最初の要素field_name
と要素を取得します。field_body
field
from docutils.core import publish_doctree
source = """Some text ...
:foo: bar
Some text ...
"""
# Parse reStructuredText input, returning the Docutils doctree as
# an `xml.dom.minidom.Document` instance.
doctree = publish_doctree(source).asdom()
# Get all field lists in the document.
fields = doctree.getElementsByTagName('field')
d = {}
for field in fields:
# I am assuming that `getElementsByTagName` only returns one element.
field_name = field.getElementsByTagName('field_name')[0]
field_body = field.getElementsByTagName('field_body')[0]
d[field_name.firstChild.nodeValue] = \
" ".join(c.firstChild.nodeValue for c in field_body.childNodes)
print d # Prints {u'foo': u'bar'}
xml.domモジュールは最も簡単に操作できるものではありません (なぜ、単なる例.firstChild.nodeValue
ではなく使用する必要があるのでしょうか)。 . lxml を使用する場合は、XPATH 表記を使用してすべての,および要素を検索することもできます。.nodeValue
field
field_name
field_body