2015-05-08 13 views
0

有关测试XML标签的适当嵌套一个问题:检测XML标签不正确的嵌套在Python

我的标签列表,从顶部从XML文件提取到底部:

  1. 关闭标签明确表示为正斜杠
  2. /to和/姓氏标签错误地嵌套。他们应该被切换。/lastname应位于/到父标签内。

tag_list = [ '音符', '到', '姓名', '/姓名', '姓氏', '/到', '/姓氏', '/注释']

什么将代码或方向发现/姓氏标签是在它的父母之外,是/对吗?

干杯。

回答

1

做一个空栈。

  • 迭代通过列表:
    • 如果你找到一个开始标记,将其推入堆栈。
    • 如果您找到了结束标签,请将其与堆栈顶部的条目进行比较。
      • 如果堆栈为空或顶部不匹配失败。
      • 如果匹配,弹出堆栈并继续。
  • 在迭代结束:
    • 如果堆栈是空的,申报成功。
    • 否则失败。
+0

优秀。它似乎适用于具有相同名称的多个标签。我之前使用过类似的算法,但没有使用斜杠。 – user1552294

2

删除反斜杠,迭代reversed版本,并与原始版本进行比较。

例如,这会给你的差异的指标:

wo = [tag[1: ] if tag and tag[0] == '/' else tag for tag in taglist] 
rev = list(reversed(wo)) 
discrepancies = [i for i in xrange(len(wo)) if wo[i] != rev[i]] 
+0

谢谢。它回答了与我发布的标签列表相关的问题。但它不能扩展到其他标签订单,例如标签没有对称放置的情况。你有没有解决这个问题?这里:<?xml version =“1.0”?> \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t user1552294