当前位置: 首页 > news >正文

开网站做备案需要什么资料石家庄模板建站

开网站做备案需要什么资料,石家庄模板建站,广东建设企业网站哪家好,网站规划与建设步骤1、问题背景 我们在使用 LXML 库解析 MathML 表达式时,可能会遇到这样一个问题:在递归解析过程中,我们可能会重复进入同一个节点,导致解析结果不正确。例如,我们希望将以下 MathML 表达式解析为 Python 表达式&#x…

在这里插入图片描述

1、问题背景

我们在使用 LXML 库解析 MathML 表达式时,可能会遇到这样一个问题:在递归解析过程中,我们可能会重复进入同一个节点,导致解析结果不正确。例如,我们希望将以下 MathML 表达式解析为 Python 表达式:

<?xml version="1.0"?>
<math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/1998/Math/MathML http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd"><mrow><mfrac><mn>3</mn></mn><mn>5</mn></mn></mfrac></mrow>
</math>

如果我们使用以下代码来解析该表达式:

def parseMML(mmlinput):from lxml import etreefrom StringIO import *from lxml import objectifyexppy=[]events = ("start", "end")context = etree.iterparse(StringIO(mmlinput),events=events)for action, elem in context:if (action=='start') and (elem.tag=='mrow'):exppy+='('if (action=='end') and (elem.tag=='mrow'):exppy+=')'if (action=='start') and (elem.tag=='mfrac'):mmlaux=etree.tostring(elem[0])exppy+=parseMML(mmlaux)exppy+='/'mmlaux=etree.tostring(elem[1])exppy+=parseMML(mmlaux)if action=='start' and elem.tag=='mn': #this is a numberexppy+=elem.textreturn (exppy)

那么我们得到的解析结果将是:

['(', '(', '3', ')', '/', '(', '5', ')', '(', '3', ')', '(', '5', ')', ')']

而不是我们期望的:

['(', '(', '3', ')', '/', '(', '5', ')', ')']

这是因为在解析 mfrac 节点时,我们递归调用了 parseMML 函数两次,分别解析了分子和分母。而在解析分子时,我们又递归调用了 parseMML 函数,导致重复进入了 mrow 节点。

2、解决方案

为了解决这个问题,我们可以使用一个栈来保存已经解析过的节点。当我们开始解析一个新的节点时,我们可以将该节点压入栈中。当我们完成解析该节点时,我们可以将该节点从栈中弹出。这样,我们就能够避免重复进入同一个节点。

以下代码演示了如何使用栈来避免重复进入同一个节点:

def parseMML(mmlinput):from lxml import etreefrom StringIO import *from lxml import objectifyexppy=[]events = ("start", "end")context = etree.iterparse(StringIO(mmlinput),events=events)nodestack=[]for action, elem in context:if action=='start' and elem.tag in nodestack:continueif (action=='start') and (elem.tag=='mrow'):nodestack.append(elem.tag)exppy+='('if (action=='end') and (elem.tag=='mrow'):nodestack.pop()exppy+=')'if (action=='start') and (elem.tag=='mfrac'):nodestack.append(elem.tag)mmlaux=etree.tostring(elem[0])exppy+=parseMML(mmlaux)exppy+='/'mmlaux=etree.tostring(elem[1])exppy+=parseMML(mmlaux)if action=='start' and elem.tag=='mn': #this is a numberexppy+=elem.textreturn (exppy)

使用该代码,我们可以得到正确的解析结果:

['(', '(', '3', ')', '/', '(', '5', ')', ')']
http://www.bjxfkj.com.cn/article/109423.html

相关文章:

  • 请人代做谷歌外贸网站服务平台是什么意思
  • 网站的后缀重庆做网站建设团队
  • 电子商务官方网站青海公司网页设计
  • 简单的网站架构百度认证中心
  • 手机对比网站宠物医疗设计素材网站
  • 微信外链网站怎么在百度知道做公司网站
  • 怎么做QQ信任网站珍岛外贸网站建设
  • 网站建设可研报告哈尔滨建设工程招投标办公室
  • 韩国男女做游戏视频网站广告设计公司文案
  • 网站设计公司业务怎么做四川网站建设 湖南岚鸿
  • dj音乐网站建设开发东莞网站建设知名公司排名
  • 南城网站建设多少钱事业单位的网站建设费列哪
  • 不知道我自己的网站的ftp账号湖南微信网站公司电话
  • 云建站不能用了吗企业网站建设应避免数据孤岛
  • 外贸建站优化小米发布会官网
  • 网站维护包括哪些wordpress ip 跳转
  • 自己做的网站打开慢手机应用软件开发培训班
  • 杭州电商网站建设网站开发工程师职业
  • 有没有什么做统计的网站医疗网站建设管理
  • 姑苏网站建设工作方案的格式及范文
  • 网站排名下降原因网站扫码登录怎么做
  • 网站导航栏图标app网站开发工具下载
  • wordpress网站发布免费自助建站平台
  • wordpress免费建站教程网站搜索优化方法
  • 精品成品网站1688wordpress文件下载
  • 网站留言板模板小程序广州开发公司
  • 产品展示型网站岳阳网站开发公司
  • 三合一网站管理系统wordpress clef
  • 宝安最好的网站建设建设小网站教程
  • 青海省网站建设公司电话小程序代码生成器