也许添加新标签的方法可能通过类似于深度优先搜索的过程完成。最初的数据结构将只是一个单一的叶节点:
[
["#text", "hello world!"]
]
添加的第一个标签将是迄今分裂的唯一节点为两个节点,其中一个有标记“B”。在现实中被添加了新的元素和唯一的节点的字符串被做成了什么,这是一个字符串:
[
["b",
["#text", "hello"]
],
["#text", " world!"]
]
归纳的过程中,叶节点包含原始文本和非叶节点的子串是标签。当添加另一个标签时,执行深度优先搜索,同时还保持到目前为止所看到的子串的长度的总和
当搜索在上述结构中输入“b”时,子串总和长度将为0.在添加该节点的字符串(“你好”)的长度的串长度将成为5.由于范围“I”重叠0 - 5“b”节点必须被分割暂时产生:
[
["b",
["#text", "h"],
["i",
["#text", "ello"]
]
],
["#text", " world!"]
]
然而深度第一次搜索没有完成“i”标记,下一个节点(标记为“#text”)仍然必须被分割。当进入该节点时,当前的子串长度将是5,并且在添加该节点的文本(“世界!”)后将变为12。 “i”是5的范围内 - 这是上分裂生产节点12:
[
["b",
["#text", "h"],
["i",
["#text", "ello"]
]
],
["i",
["#text", " "]
],
["#text", "world!"]
]
注意,括号内是从你在你的问题贴什么略有不同。我认为原支架问题(在评论中提到)不是最后一个支架
它看起来像你将不得不知道“我”部分包含在“b”使用它?只是试图理解为什么这可能是一个理想的东西 – asimes
是的,你知道从“开始”和“结束”偏移量(约束是0到4的文本必须是“b” ,从1到5的文本必须是“我”的孩子)。 –
你的例子有不平衡的方括号,它是不明显的如何解决它,你可以平衡它,然后再次发布? – asimes