如果一个 xml 缺少标签,那么该如何用 java 将缺失的标签补齐?不然dom4j无法解析
发布网友
发布时间:2022-04-30 16:00
我来回答
共4个回答
热心网友
时间:2023-10-08 21:29
用栈的思想:
以以上xml为例:
xml开始检查, 检查(<?xml version="1.0" encoding="GB2312"?> 部分)。
1、标签开始时的验证操作(入栈操作):
标签入栈检查(内容以<XXX开始) 验证成功
<RESULT> (标签为<XXX>的) 标签入栈 ,
(标签为<XXX/>的)标签不入栈。
继续扫描,
如果读到内容(非<>结构), 略过内容,做2(标签结束时的验证操作)
如果读到标签的开始标志<XXX>, 回到1(标签开始时的验证操作).
2 标签结束时的验证操作(入栈操作):
做出栈检查 形式为 <XXX/> 且该标签的开始部分正好在栈中。 出栈。
继续扫描:
如果读到标签的结束标志(<XXX/>结构), 做2(标签结束时的验证操作)
如果读到标签的开始标志<XXX>, 回到1(标签开始时的验证操作).
<RESULT> 入栈
<VALUE> 读到非内容, 继续入栈
<NO> 读到非内容, 继续入栈
</NO> 读到内容, 出栈检查, 出栈,
<ADDR> 读到标签的开始标志 入栈
</ADDR> 读到内容 出栈,
</VALUE> 读到标签的结束标志 出栈,
<VALUE> 如果读到标签的开始标志 入栈
<NO> 读到标签的开始标志 入栈
读到内容 略过内容出栈 出栈检查失败,
补齐标签, 只需要在相应位置加上标签的结束标志即可。
热心网友
时间:2023-10-08 21:30
说个思路,首先你把xml读成一个字符串。
如果已知只可能缺少</No>,那么用indexOf先定位<NO>如index1,如果index!=-1, 接着定位接下来的</NO>如index2,再定位index1后面最近的<如index3, 如果index2==-1 或者 index3<index2,那么肯定缺少</NO>,将位置记录下来放到list或者数组;
然后进入下一个循环,即从index1开始 定位下一个<NO>
最后,从后往前遍历位置记录,插入</NO>
如果不仅仅是缺少</NO>,情况会复杂一些,那么你就将NO作为变量,拼接<NO>和</NO>, 这样应该能解决问题。
热心网友
时间:2023-10-08 21:30
不好做,除非你事先就确定了整个文档的结构,否则,程序也没法判断你这个</NO>放到B1234后面还是</ADDR>后面
热心网友
时间:2023-10-08 21:31
这怎以弄啊,要么你刚开始就把每一个value定一个id,然后通过找到第二个,把第二个元素全部重写一篇看行不