假设我有以下剩余输入:
Some text ...
:foo: bar
Some text ...
我想最终得到的是这样的字典:
{"foo": "bar"}
我尝试使用这个:
tree = docutils.core.publish_parts(text)
它确实解析了字段列表,但我最终得到了一些伪 XMLtree["whole"]?
:
<document source="<string>">
<docinfo>
<field>
<field_name>
foo
<field_body>
<paragraph>
bar
自从tree
dict 不包含任何其他有用的信息,这只是一个字符串,我不知道如何从其余文档中解析字段列表。我该怎么做呢?
您可以尝试使用类似以下代码的内容。而不是使用publish_parts
我用过的方法publish_doctree,获取文档的伪 XML 表示形式。然后我将其转换为 XML DOM 以提取所有field
元素。然后我得到第一个field_name
and 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'}
The xml.dom模块不是最容易使用的(为什么我需要使用.firstChild.nodeValue
而不仅仅是.nodeValue
例如),所以您可能希望使用xml.etree.ElementTree模块,我发现它更容易使用。如果您使用 lxml,您还可以使用 XPATH 表示法来查找所有field
, field_name
and field_body
元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)