一亩三分地

 找回密码 注册账号

扫描二维码登录本站

微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
查看: 342|回复: 3
收起左侧

[其他] 求解一道xml parser的题

[复制链接] |只看干货 |刷题
我的人缘0

升级   49%


分享帖子到朋友圈
搬砖工 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   94% (17)
 
 
5% (1)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
看到一个面经说

一个string paring问题: “<ClassA><PropertyA>valueA</PropertyA><PropertyB>ValueB</PropertyB>...</ClassA>   <ClassA><PropertyA>...</PropertyA><PropertyB>...</PropertyB>...</ClassA>...”, 然后print出一个表格
PropertyA PropertyB ...
ValueA      ValueB ...
Property 提前并没有定义,要看到时候parse出来是啥

我理解是这个string应该是有类似<div></div>在开头结尾的。但是实在想不到怎么去parse这种string?是建一个类似下面这样的tag class,然后用stack?

class Tag {
  String name;
  String value;
  List<Tag> children
}

评分

参与人数 1大米 +3 收起 理由
14417335 + 3

查看全部评分


上一篇:请教一道算法题目
下一篇:请教一道算法题目
我的人缘0

升级   93.5%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   94% (232)
 
 
5% (13)    👎
你的思路感觉可以。碰到tag开头就入栈tag的下表,碰到tag结尾就出盏并且把盏顶坐标到当前坐标中间的值记录成value。感觉也可以用dfs来做。个人感觉dfs可能会简单点。dfs返回一个dom tree的节点(就像你定义的一样)就可以了。

评分

参与人数 1大米 +2 收起 理由
14417335 + 2

查看全部评分

回复

使用道具 举报

我的人缘0

升级   49%

 楼主| 搬砖工 2020-10-27 01:31:00 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   94% (17)
 
 
5% (1)    👎
hjy 发表于 2020-10-26 14:08
你的思路感觉可以。碰到tag开头就入栈tag的下表,碰到tag结尾就出盏并且把盏顶坐标到当前坐标中间的值记录 ...

谢谢!感觉实际做parsing的时候有点tricky, 要判断‘<’ ‘>’还有value。另外后面把信息打出来也是有点乱,只能从parent tag再做一次dfs?
回复

使用道具 举报

我的人缘0

升级   93.5%

hjy 2020-10-27 02:49:29 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   94% (232)
 
 
5% (13)    👎
本帖最后由 hjy 于 2020-10-27 02:50 编辑

下面这个是sudo code, 我感觉可以试试这样:

sudo code:
[Python] 纯文本查看 复制代码
def dfs(node, str, idx):
initialize a buffer stack
      i = idx
    while (i < len(str)):
        if str[i] is '<':
            push i onto stack
            i++
        else if str[i] is '>':
            peek stack top store that as j, tag_name = str[j+1,i]
            if the tag_name starts with "/":
                pop stack top
                peek stack top as k
                str [k+1, j] is the value of the current tag
                set tag name and value of the current node(don't set the value if current node's child list is not empty)
                return node, i+1
            else:
                if i + 1 < str.length and str[i+1] == '<':
                    childnode, nextidx = dfs(new node(), str, i+1)
                    i = nextidx
                    add childnode to current child list
                else:
                    push i to stack
                    i ++ 
        else:
            i++
    return node, i+1




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表