您可以尝试使用以下代码。 与其使用 publish_ parts
方法, 不如使用 < a href=> http://docutils. sourceforge. net/docs/ api/publisher. html", rel= “nofollow”\\ code> publish_doctree , 来获取您的文档的伪 XML 表示。 我随后转换为 XML DOM, 以便提取所有 < code > field 元素 。 然后, 我得到了每个 < code > field_ name 元素的第一个 < code > 和 < field_body < body 元素。
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 }
http://docs.python.org/library/xml.dom.html" rel="nofollow" >xml.dom 模块并非最容易使用(为什么我需要使用 .firstChild.nodeValue
,而不仅仅是 .nodeValue
),所以你不妨使用 xml.etree.html" rel=“nofollowtre 模块,我发现使用该模块更容易使用。如果使用 lxml,你也可以使用XPATH Notation来查找所有 field
, , fiel_name 和 field_body_body 。