您可以尝试使用类似以下代码的内容。而不是使用publish_parts
我曾经使用过的方法publish_doctree
来获取文档的伪XML表示形式。然后,我已转换为XML DOM,以提取所有field
元素。然后我得到每个元素的第一个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
,而不是仅仅.nodeValue
例如),所以你可能希望使用xml.etree.ElementTree模块,我觉得轻松了许多与工作。如果您使用LXML你也可以使用XPath表示法来找到所有的field
,field_name
和field_body
元素。