urpc是过于简单的流xml解析器
uxml的Python项目详细描述
#在不到100行代码中进行μxml-xml流解析
μxml是解析大型(或缓慢加载)xml行的一种过度模拟的方法,它具有标记匹配和回调的简单方法。 没有依赖项(除了python3.4+),库中只有一个类uxml.parser。
`python import uxml p = uxml.Parser(open('test.rss'))p.find('/rss/channel/item', lambda e: print(e)) p.start() `
第一行有意义的是解析器的对象创建。唯一的参数是file(或任何其他兼容的io.textiowrapper对象)。 。find方法为解析器添加新的标记匹配器。第一个参数是指向标记的指针,我们希望在XML流中找到它。 我使用nanoxpath符号(即,您应该显示此标记的完整路径,或者使用//作为起始符号)。 find的第二个参数是一个回调函数,如果找到给定的标记,将调用这个回调函数,而这个回调函数的唯一参数是这个标记内的标记和属性的内部结构。属性可以按名称从子标记中分离,它总是以“@”符号开头。 如果标记只是一个内部文本-它将作为结果返回。如果有多个同名的子项,则它将作为标记列表返回。如果标记同时具有内部文本和属性,则首先将作为“文本”添加到属性中。
您可以使用无限数量的“查找”。 解析将从start方法开始。上面的示例将打印给定rss文件中的每个项。 让我给你看一些更复杂的东西。
`python res = [] p = uxml.Parser('test.rss')p.find('//link', lambda x: res.append(x)).find('//description', lambda x: print(x)).start() `
首先,您可以注意到find和start调用是可链接的。 尾随的/将转换为任意数量的先前标记,因此这次我们将在res变量处获得链接列表。 另外,我们只需将“test.rss”文件名传递给解析器构造函数。它不仅打开这个文件,还试图猜测XML编码(非常糟糕,但无论如何)。