微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从reStructuredText提取字段列表

如何解决从reStructuredText提取字段列表

您可以尝试使用类似以下代码内容。而不是使用publish_parts我曾经使用过的方法publish_doctree获取文档的伪XML表示形式。然后,我已转换为XML DOM,以提取所有field元素。然后我得到每个元素的第一个field_namefield_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表示法来找到所有的fieldfield_namefield_body元素。

解决方法

说我有以下reST输入:

Some text ...

:foo: bar

Some text ...

我最终想得到的是这样的字典:

{"foo": "bar"}

我试图用这个:

tree = docutils.core.publish_parts(text)

它确实解析了字段列表,但是我最终得到了一些伪XML tree["whole"]?

<document source="<string>">
    <docinfo>
        <field>
            <field_name>
                foo
            <field_body>
                <paragraph>
                    bar

由于treedict不包含任何其他有用的信息,而仅仅是一个字符串,因此我不确定如何从reST文档中解析出字段列表。我该怎么办?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。