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() `

首先,您可以注意到findstart调用是可链接的。 尾随的/将转换为任意数量的先前标记,因此这次我们将在res变量处获得链接列表。 另外,我们只需将“test.rss”文件名传递给解析器构造函数。它不仅打开这个文件,还试图猜测XML编码(非常糟糕,但无论如何)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
通过GWT JSNI传递Java对象时发生javascript错误   java Spring启动项目wildfly服务器失败   java如何进行会话来存储Id?   javajpa/hibernate如何通过带注释的外键映射元素集合   Java将字节[]转换为双[],反之亦然   eclipse显示Java双值   java如何正确读取socket数据包   是否存在用于集合处理的Java库?   javacom。太阳jna。无法将指针强制转换为com。太阳jna。站台win32。温迪夫。LPARAM   java Eclipse插件开发。我可以在插件中使用已经存在的jar文件吗?   分析Java错误:找不到符号变量   java如何使按钮摆动以进行大的处理   如何通过传递bucket name和file name从java中的minio服务器下载多个文件   JavaScrollPane JavaFX使其滚动更多?   java无法加载C:\Users\username\AppData\Local\Android\Sdk\buildtools\28.0.3\lib\dx。罐子   JavaSwing中是否有一个“组框”等价物?   java使用slf4j和log4j与单独使用log4j相比,是否存在性能开销?   java模式和匹配:格式化文本文件   JTable行增长的java问题