如何解决如何使用 Python 的 docutils 来解析像树一样的 RST 文档?
从本网站的不同答案中,我编写/复制了以下代码来解析 RST 文档。
import docutils.nodes
import docutils.parsers.rst
import docutils.utils
import docutils.frontend
def parse_rst(text: str) -> docutils.nodes.document:
parser = docutils.parsers.rst.Parser()
components = (docutils.parsers.rst.Parser,)
settings = docutils.frontend.OptionParser(components=components).get_default_values()
document = docutils.utils.new_document('<rst-doc>',settings=settings)
parser.parse(text,document)
return document
class MyVisitor(docutils.nodes.NodeVisitor):
def visit_reference(self,node: docutils.nodes.reference) -> None:
"""Called for "reference" nodes."""
print(node)
def unkNown_visit(self,node: docutils.nodes.Node) -> None:
"""Called for all other node types."""
pass
def myparse():
s = ''
with open('test.rst') as f:
s = f.read()
doc = parse_rst(s)
visitor = MyVisitor(doc)
return doc,visitor
此代码有效并且能够解析 RST 文档。如果我有一个像下面这样的 RST 文档
heading1
========
and some
multi line text
subheading1
-----------
afjafjafjfjajf
heading2
========
other text
我希望得到一个树状结构,其中主要标题在一个级别上,每个标题都是一个节点,我可以使用它在树中递归到其子标题和子标题。相反,我得到了一个完全线性的结构,其中副标题似乎与更高级别的标题处于同一级别。这是 doc.ids 的输出
>>> doc,vis = myparse()
>>> doc.ids
{'heading1': <section "heading1": <title...><paragraph...><section "subheading1"...>>,'subheading1': <section "subheading1": <title...><paragraph...>>,'heading2': <section "heading2": <title...><paragraph...>>}
所以,我对如何以编程方式迭代顶级标题有点不知所措。如果有的话,使用 docutils 像树一样导航文档的正确方法是什么,以便我可以轻松确定哪些副标题属于适当的标题,并避免在尝试查找主要的顶级标题时迭代副标题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。