dom4j 间隔插入节点 处理复杂的xml文档

2023-02-12,,,,

前几周跟着老师做了个项目,个人主要负责xml文档处理.

先贴下修改前的xml(部分)

 <?xml version="1.0" encoding="GB2312" standalone="yes"?>
<BroadcastData code="110000000" creationtime="20171103111425" version="2.0">
<ProviderInfo id="ChinaEPG" name="David" />
<SchedulerData>
<Channel type="Normal">
<ChannelText language="chi">
<ChannelName>CCTV-1高清</ChannelName>
</ChannelText>
<Event eventid="1" begintime="20171103004800" duration="004500" eventtype="00">
<EventText language="chi">
<Name>动物世界</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="2" begintime="20171103013300" duration="003000" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="3" begintime="20171103020300" duration="004800" eventtype="11">
<EventText language="chi">
<Name>超级工程Ⅱ:中国路</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="4" begintime="20171103025100" duration="000900" eventtype="11">
<EventText language="chi">
<Name>精彩1刻:航拍中国-陕西</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="5" begintime="20171103030000" duration="012900" eventtype="11">
<EventText language="chi">
<Name>中国诗词大会Ⅱ:第一场</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="6" begintime="20171103042900" duration="002800" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="7" begintime="20171103045700" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="8" begintime="20171103052700" duration="003300" eventtype="11">
<EventText language="chi">
<Name>人与自然</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="9" begintime="20171103060000" duration="023600" eventtype="11">
<EventText language="chi">
<Name>朝闻天下</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="10" begintime="20171103083600" duration="004700" eventtype="11">
<EventText language="chi">
<Name>生活圈</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="11" begintime="20171103092300" duration="005100" eventtype="11">
<EventText language="chi">
<Name>太行山上(14)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="12" begintime="20171103101400" duration="004700" eventtype="11">
<EventText language="chi">
<Name>太行山上(15)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="13" begintime="20171103110100" duration="005900" eventtype="11">
<EventText language="chi">
<Name>太行山上(16)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="14" begintime="20171103120000" duration="003600" eventtype="11">
<EventText language="chi">
<Name>新闻30分</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="15" begintime="20171103123600" duration="004200" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="16" begintime="20171103131800" duration="004800" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(15)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="17" begintime="20171103140600" duration="005300" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(16)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="18" begintime="20171103145900" duration="005000" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(17)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="19" begintime="20171103154900" duration="005700" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(18)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="20" begintime="20171103164600" duration="000600" eventtype="11">
<EventText language="chi">
<Name>中国梦歌曲:满城烟花</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="21" begintime="20171103165200" duration="000800" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="22" begintime="20171103170000" duration="005700" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="23" begintime="20171103175700" duration="002600" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="24" begintime="20171103182300" duration="001000" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园:故事乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="25" begintime="20171103183300" duration="002700" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="26" begintime="20171103190000" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="27" begintime="20171103193000" duration="001000" eventtype="11">
<EventText language="chi">
<Name>天气预报</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="28" begintime="20171103194000" duration="002200" eventtype="11">
<EventText language="chi">
<Name>焦点访谈</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="29" begintime="20171103200200" duration="000500" eventtype="11">
<EventText language="chi">
<Name>前情提要:青恋(24)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="30" begintime="20171103200700" duration="005300" eventtype="11">
<EventText language="chi">
<Name>青恋(24)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="31" begintime="20171103210000" duration="010000" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="32" begintime="20171103220000" duration="004200" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="33" begintime="20171103224200" duration="005600" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="34" begintime="20171103233800" duration="002100" eventtype="11">
<EventText language="chi">
<Name>加油向未来(9)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="35" begintime="20171103235900" duration="012600" eventtype="22">
<EventText language="chi">
<Name>结束</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="36" begintime="20171104012500" duration="000800" eventtype="00">
<EventText language="chi">
<Name>生活提示</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="37" begintime="20171104013300" duration="003200" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="38" begintime="20171104020500" duration="004500" eventtype="11">
<EventText language="chi">
<Name>动物世界</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="39" begintime="20171104025000" duration="001000" eventtype="11">
<EventText language="chi">
<Name>精彩1刻:航拍中国-陕西</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="40" begintime="20171104030000" duration="012900" eventtype="11">
<EventText language="chi">
<Name>中国诗词大会Ⅱ:第二场</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="41" begintime="20171104042900" duration="002800" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="42" begintime="20171104045700" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="43" begintime="20171104052700" duration="003300" eventtype="11">
<EventText language="chi">
<Name>人与自然</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="44" begintime="20171104060000" duration="023600" eventtype="11">
<EventText language="chi">
<Name>朝闻天下</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="45" begintime="20171104083600" duration="004800" eventtype="11">
<EventText language="chi">
<Name>太行山上(17)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="46" begintime="20171104092400" duration="004900" eventtype="11">
<EventText language="chi">
<Name>太行山上(18)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="47" begintime="20171104101300" duration="014700" eventtype="11">
<EventText language="chi">
<Name>加油向未来(9)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="48" begintime="20171104120000" duration="003600" eventtype="11">
<EventText language="chi">
<Name>新闻30分</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="49" begintime="20171104123600" duration="003900" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="50" begintime="20171104131500" duration="010200" eventtype="11">
<EventText language="chi">
<Name>寻宝-我有传家宝</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="51" begintime="20171104141700" duration="005100" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(19)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="52" begintime="20171104150800" duration="005000" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(20)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="53" begintime="20171104155800" duration="004900" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(21)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="54" begintime="20171104164700" duration="005700" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(22)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="55" begintime="20171104174400" duration="001600" eventtype="11">
<EventText language="chi">
<Name>中国梦歌曲:大地芬芳</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="56" begintime="20171104180000" duration="010000" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="57" begintime="20171104190000" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="58" begintime="20171104193000" duration="000900" eventtype="11">
<EventText language="chi">
<Name>天气预报</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="59" begintime="20171104193900" duration="002400" eventtype="11">
<EventText language="chi">
<Name>焦点访谈</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="60" begintime="20171104200300" duration="015700" eventtype="11">
<EventText language="chi">
<Name>星光大道</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="61" begintime="20171104220000" duration="003900" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="62" begintime="20171104223900" duration="010100" eventtype="11">
<EventText language="chi">
<Name>开讲啦</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="63" begintime="20171104234000" duration="001900" eventtype="11">
<EventText language="chi">
<Name>星光大道</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="64" begintime="20171104235900" duration="012400" eventtype="22">
<EventText language="chi">
<Name>结束</Name>
<ShortDescription />
</EventText>
</Event>

修改后的xml(部分)

 <?xml version="1.0" encoding="GB2312" standalone="yes"?>
<BroadcastData code="110000000" creationtime="20171103111425" version="2.0">
<ProviderInfo id="ChinaEPG" name="David" />
<SchedulerData>
<Channel type="Normal">
<ChannelText language="chi">
<ChannelName>CCTV-1高清</ChannelName>
</ChannelText>
<Event eventid="03001" begintime="20171103004800" duration="004500" eventtype="00">
<EventText language="chi">
<Name>动物世界</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03002" begintime="20171103013300" duration="003000" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03003" begintime="20171103020300" duration="004800" eventtype="11">
<EventText language="chi">
<Name>超级工程Ⅱ:中国路</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03004" begintime="20171103025100" duration="000900" eventtype="11">
<EventText language="chi">
<Name>精彩1刻:航拍中国-陕西</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03005" begintime="20171103030000" duration="012900" eventtype="11">
<EventText language="chi">
<Name>中国诗词大会Ⅱ:第一场</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03006" begintime="20171103042900" duration="002800" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03007" begintime="20171103045700" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="03008" begintime="20171103052700" duration="003200" eventtype="11">
<EventText language="chi">
<Name>人与自然</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103055900" eventtype="11" eventid="03009" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03010" begintime="20171103060000" duration="023500" eventtype="11">
<EventText language="chi">
<Name>朝闻天下</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103083500" eventtype="11" eventid="03011" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03012" begintime="20171103083600" duration="004600" eventtype="11">
<EventText language="chi">
<Name>生活圈</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103092200" eventtype="11" eventid="03013" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03014" begintime="20171103092300" duration="005000" eventtype="11">
<EventText language="chi">
<Name>太行山上(14)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103101300" eventtype="11" eventid="03015" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03016" begintime="20171103101400" duration="004600" eventtype="11">
<EventText language="chi">
<Name>太行山上(15)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103110000" eventtype="11" eventid="03017" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03018" begintime="20171103110100" duration="005800" eventtype="11">
<EventText language="chi">
<Name>太行山上(16)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103115900" eventtype="11" eventid="03019" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03020" begintime="20171103120000" duration="003500" eventtype="11">
<EventText language="chi">
<Name>新闻30分</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103123500" eventtype="11" eventid="03021" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03022" begintime="20171103123600" duration="004100" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103131700" eventtype="11" eventid="03023" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03024" begintime="20171103131800" duration="004700" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(15)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103140500" eventtype="11" eventid="03025" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03026" begintime="20171103140600" duration="005200" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(16)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103145800" eventtype="11" eventid="03027" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03028" begintime="20171103145900" duration="004900" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(17)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103154800" eventtype="11" eventid="03029" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03030" begintime="20171103154900" duration="005600" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(18)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103164500" eventtype="11" eventid="03031" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03032" begintime="20171103164600" duration="000500" eventtype="11">
<EventText language="chi">
<Name>中国梦歌曲:满城烟花</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103165100" eventtype="11" eventid="03033" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03034" begintime="20171103165200" duration="000700" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103165900" eventtype="11" eventid="03035" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03036" begintime="20171103170000" duration="005600" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103175600" eventtype="11" eventid="03037" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03038" begintime="20171103175700" duration="002500" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103182200" eventtype="11" eventid="03039" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03040" begintime="20171103182300" duration="000900" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园:故事乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103183200" eventtype="11" eventid="03041" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03042" begintime="20171103183300" duration="002600" eventtype="11">
<EventText language="chi">
<Name>第一动画乐园</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103185900" eventtype="11" eventid="03043" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03044" begintime="20171103190000" duration="002900" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103192900" eventtype="11" eventid="03045" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03046" begintime="20171103193000" duration="000900" eventtype="11">
<EventText language="chi">
<Name>天气预报</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103193900" eventtype="11" eventid="03047" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03048" begintime="20171103194000" duration="002100" eventtype="11">
<EventText language="chi">
<Name>焦点访谈</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103200100" eventtype="11" eventid="03049" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03050" begintime="20171103200200" duration="000400" eventtype="11">
<EventText language="chi">
<Name>前情提要:青恋(24)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103200600" eventtype="11" eventid="03051" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03052" begintime="20171103200700" duration="005200" eventtype="11">
<EventText language="chi">
<Name>青恋(24)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103205900" eventtype="11" eventid="03053" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03054" begintime="20171103210000" duration="005900" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103215900" eventtype="11" eventid="03055" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03056" begintime="20171103220000" duration="004100" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103224100" eventtype="11" eventid="03057" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03058" begintime="20171103224200" duration="005500" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103233700" eventtype="11" eventid="03059" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03060" begintime="20171103233800" duration="002000" eventtype="11">
<EventText language="chi">
<Name>加油向未来(9)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171103235800" eventtype="11" eventid="03061" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="03062" begintime="20171103235900" duration="012600" eventtype="22">
<EventText language="chi">
<Name>结束</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04001" begintime="20171104012500" duration="000800" eventtype="00">
<EventText language="chi">
<Name>生活提示</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04002" begintime="20171104013300" duration="003200" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04003" begintime="20171104020500" duration="004500" eventtype="11">
<EventText language="chi">
<Name>动物世界</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04004" begintime="20171104025000" duration="001000" eventtype="11">
<EventText language="chi">
<Name>精彩1刻:航拍中国-陕西</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04005" begintime="20171104030000" duration="012900" eventtype="11">
<EventText language="chi">
<Name>中国诗词大会Ⅱ:第二场</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04006" begintime="20171104042900" duration="002800" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04007" begintime="20171104045700" duration="003000" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event eventid="04008" begintime="20171104052700" duration="003200" eventtype="11">
<EventText language="chi">
<Name>人与自然</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104055900" eventtype="11" eventid="04009" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04010" begintime="20171104060000" duration="023500" eventtype="11">
<EventText language="chi">
<Name>朝闻天下</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104083500" eventtype="11" eventid="04011" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04012" begintime="20171104083600" duration="004700" eventtype="11">
<EventText language="chi">
<Name>太行山上(17)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104092300" eventtype="11" eventid="04013" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04014" begintime="20171104092400" duration="004800" eventtype="11">
<EventText language="chi">
<Name>太行山上(18)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104101200" eventtype="11" eventid="04015" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04016" begintime="20171104101300" duration="014600" eventtype="11">
<EventText language="chi">
<Name>加油向未来(9)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104115900" eventtype="11" eventid="04017" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04018" begintime="20171104120000" duration="003500" eventtype="11">
<EventText language="chi">
<Name>新闻30分</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104123500" eventtype="11" eventid="04019" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04020" begintime="20171104123600" duration="003800" eventtype="11">
<EventText language="chi">
<Name>今日说法</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104131400" eventtype="11" eventid="04021" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04022" begintime="20171104131500" duration="010100" eventtype="11">
<EventText language="chi">
<Name>寻宝-我有传家宝</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104141600" eventtype="11" eventid="04023" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04024" begintime="20171104141700" duration="005000" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(19)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104150700" eventtype="11" eventid="04025" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04026" begintime="20171104150800" duration="004900" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(20)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104155700" eventtype="11" eventid="04027" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04028" begintime="20171104155800" duration="004800" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(21)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104164600" eventtype="11" eventid="04029" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04030" begintime="20171104164700" duration="005600" eventtype="11">
<EventText language="chi">
<Name>鸡毛飞上天(22)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104174300" eventtype="11" eventid="04031" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04032" begintime="20171104174400" duration="001500" eventtype="11">
<EventText language="chi">
<Name>中国梦歌曲:大地芬芳</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104175900" eventtype="11" eventid="04033" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04034" begintime="20171104180000" duration="005900" eventtype="11">
<EventText language="chi">
<Name>机智过人Ⅰ(6)</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104185900" eventtype="11" eventid="04035" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04036" begintime="20171104190000" duration="002900" eventtype="11">
<EventText language="chi">
<Name>新闻联播</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104192900" eventtype="11" eventid="04037" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04038" begintime="20171104193000" duration="000800" eventtype="11">
<EventText language="chi">
<Name>天气预报</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104193800" eventtype="11" eventid="04039" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04040" begintime="20171104193900" duration="002300" eventtype="11">
<EventText language="chi">
<Name>焦点访谈</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104200200" eventtype="11" eventid="04041" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04042" begintime="20171104200300" duration="015600" eventtype="11">
<EventText language="chi">
<Name>星光大道</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104215900" eventtype="11" eventid="04043" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04044" begintime="20171104220000" duration="003800" eventtype="11">
<EventText language="chi">
<Name>晚间新闻</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104223800" eventtype="11" eventid="04045" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04046" begintime="20171104223900" duration="010000" eventtype="11">
<EventText language="chi">
<Name>开讲啦</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104233900" eventtype="11" eventid="04047" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04048" begintime="20171104234000" duration="001800" eventtype="11">
<EventText language="chi">
<Name>星光大道</Name>
<ShortDescription />
</EventText>
</Event>
<Event begintime="20171104235800" eventtype="11" eventid="04049" duration="000100">
<EventText language="chi">
<Name>办中行ETC 免费送OBU设备</Name>
</EventText>
</Event>
<Event eventid="04050" begintime="20171104235900" duration="012400" eventtype="22">
<EventText language="chi">
<Name>结束</Name>
<ShortDescription />
</EventText>
</Event>

说明:  1.修改后的xml间隔插入了广告,如从每天的6点开始接下来每天6点都要插入广告

2.eventid,begintime,duration进行了变化如eventid = 1 ----------> 03001

3.原xml的eventid每一天是相连的,即第一天结束eventid是35,第二天开始的eventid是36但是

修改后的eventid是每天从1开始

4.广告的持续时间是确定的


个人思路:插入广告后再进行属性的调整

知识点1:间隔插入节点

插入节点之前需要准备好用到的adEvent(广告节点)我已经提前创建,已经插入广告的时间点(timeIndex),后面会给出对应的方法

最初的想法是遍历节点的集合进行i+=2的操作,突然发现这种想法的致命缺陷在于间隔插入要求i+=2和遍历要求的i++互相冲突,于是开始思考采用分组的方式来避免

仔细观察了下xml文档,发现可以用每天的结束标签进行分组,于是先获得结束标签的索引,然后遍历每个组进行插入,有人可能问了,这样不还是冲突.实际上这个时候的遍历和间隔插入已经不再使用同一个参数i了所以不再有冲突

注意:1.使用了java集合的sublist(...)方法进行集合的截取操作

2.要使用Element对象的clone方法,否则会报 The Content already has an existing parent xxx的异常

     //获得结束标签的索引
List<Integer> endIndex = new ArrayList<Integer>();
for(int i=1; i<events.size(); i++){
if("22".equals(events.get(i).attributeValue("eventtype"))) {
endIndex.add(i);
}
}
System.out.println();
//分组处理 跳过第一个channelText
List<Element> list = new ArrayList<Element>();
int count = 0;
if(timeIndex <=endIndex.get(0)) {
for(int i=0;i<endIndex.size(); i++) {
if(i == 0) {
list = events.subList(1,endIndex.get(i)+1);
//插入广告
for(int j=timeIndex; j<list.size();j+=2) {
list.add(j,(Element)adEvent.clone());
count++;//计算插入了多少个广告
}
}else {
list = events.subList(endIndex.get(i-1)+1+count,endIndex.get(i)+1+count);
for(int j=timeIndex; j<list.size();j+=2) {
list.add(j,(Element)adEvent.clone());
count++;
}
}
}
}else {
//为了应对插入的节点不从第一天开始
for(int i=0;i<endIndex.size()-1; i++) {
int temp1 = timeIndex - endIndex.get(i);
int temp2 = timeIndex - endIndex.get(i+1);
if(temp1 >0 && temp2 <0) {
/*System.out.println("temp1----|" + temp1);
System.out.println("temp2-----|" + temp2);*/
for(int j=i+1;j<endIndex.size();j++) {
list = events.subList(endIndex.get(j-1)+1+count,endIndex.get(j)+1+count);
for(int m= temp1; m<list.size()-1;m+=2) {
list.add(m,(Element)adEvent.clone());
count++;
}
}
}
} }

以下的方法涉及的参数Map<String,String> propertiesMap是封装了的配置文件的信息

获得timeIndex的方法

 /**
*
* @param beginTime -- 广告的开始时间点
* @return 该时间点的索引
*/
public static int getTimeIndex(Document document,String beginTime) {
List<Element> events = document.getRootElement()
.element("SchedulerData")
.element("Channel").elements();
System.out.println("===" + beginTime);
Long long_beginTime1 = Long.parseLong(beginTime);
for(int i=1;i<events.size()-1; i++) {
if(beginTime.equals(events.get(i).attributeValue("begintime"))) {
return i;
}else {
Long long_beginTime2 = Long.parseLong(events.get(i).attributeValue("begintime"));
Long long_beginTime3 = Long.parseLong(events.get(i+1).attributeValue("begintime"));
Long duration = Long.parseLong(events.get(i).attributeValue("duration"));
Long temp1 = long_beginTime1 - long_beginTime2;
Long temp2 = long_beginTime1 - long_beginTime3;
if(temp1 > 0 && temp2 <0){
return i;
}
}
}
return 0;
}

使用timeIndex时要特别注意,一旦timeIndex为0说明节目的日期变了,此时要校对广告的开始时间

 if(timeIndex == 0) {
String begin = events.get(1).attributeValue("begintime");
beginTime = beginTime.replace(beginTime.substring(0,8),begin.substring(0,8));
timeIndex = getTimeIndex(document, beginTime);
}

创建adEvent的方法,调用的时候是从数据库读取广告信息进行创建

 public static Element createAdElement(Ad ad,String time,Map<String,String> propertiesMap) {
if(ad == null) {
System.out.println("广告对象为空!");
return null;
}
Element adElement = DocumentHelper.createElement("Event");
//beginTime
if(ad.getBeginDate() != null && time != null) {
String beginTime = ad.getBeginTime().toString();
beginTime = beginTime.replace(":","");
beginTime = beginTime.substring(0,4);
beginTime = time.substring(0,8) + beginTime + "00";// --->20171103083500
adElement.addAttribute("begintime",beginTime);
}
//duration
String duration = ad.getDuration();
if(duration != null) {
adElement.addAttribute("duration",duration);
}
//eventtype
String adEventType = propertiesMap.get("adEventType");
if(adEventType != null) {
adElement.addAttribute("eventtype",adEventType);
} //eventid
String eventId = "";
adElement.addAttribute("eventid",eventId); //language
String adLanguage ="chi";
Element eventText = adElement.addElement("EventText").addAttribute("language",adLanguage); //name节点
if(eventText != null) {
Element name = eventText.addElement("name");
if(ad.getContent() != null) {
name.setText(ad.getContent());
}
}
return adElement;
}

知识点2 更新受到广告影响的节目的开始时间(begintime)以及持续时间(duration)

说明:此方法较为简单,只需判断下一个节点是不是广告从而进行相应的调整即可

 /**
* 修改广告的begintime信息与受到广告影响的节目duration
* @param events
*/
private void updateAdtime(List<Element> events,String adDuration) {
for(int i=2;i<events.size();i++) {
Attribute duration = events.get(i).attribute("duration");
if(adDuration != null) {
if(duration.getText().equals(adDuration)) {
String lastNodeBegin = events.get(i-1).attributeValue("begintime");
String lastNodeDuration = events.get(i-1).attributeValue("duration");
if(lastNodeBegin == null || lastNodeDuration == null) {
System.out.println("上个节点不存在");
return;
}
//修改节目的持续时间
Long temp = Long.parseLong(lastNodeDuration);
temp = temp - Long.parseLong(duration.getText());
events.get(i-1).attribute("duration").setText(temp.toString()); //修改后重新获取
lastNodeBegin = events.get(i-1).attributeValue("begintime");
lastNodeDuration = events.get(i-1).attributeValue("duration"); //设置广告的开始时间
Long adBeginTime = Long.parseLong(lastNodeBegin) + Long.parseLong(lastNodeDuration);
String strAdBegin = adBeginTime.toString();
Long min = Long.parseLong(strAdBegin.substring(strAdBegin.length()-4));
if( min >= 6000) {
adBeginTime = adBeginTime + 10000 -6000;
}
strAdBegin = adBeginTime.toString();
events.get(i).attribute("begintime").setText(strAdBegin);
}
}
} }

知识点3 更新eventid,以1103为例1---->03001,  10------>03010

注意:id和begintime的dd相关,注意判断原id的长度

/**
* 修改id
* 1-->03001 10--->03010
*/
private void updateId(List<Element> events) {
if(events.size() == 0) {
return;
}
List<List<Element>> groups = new ArrayList<List<Element>>();
for(int i=1; i<events.size(); i++){
Attribute oldId = events.get(i).attribute("eventid");
String time = events.get(i).attributeValue("begintime");
String sb = "";
if(time != null){
sb = time.substring(6,8); // 截取dd
}
if(i<10) {
sb += "00" + i;
}else if(i<100) {
sb += "0" + i;
}
if(oldId != null){
oldId.setText(sb);
}
if("22".equals(events.get(i).attributeValue("eventtype"))) {
if(events.size()> (i+1)) {
List<Element> list = events.subList(i+1,events.size());
groups.add(list);
}
}
}
for(int i=0; i<groups.size(); i++) {
List<Element> subList = groups.get(i);
for(int j=0; j<subList.size(); j++) {
Attribute oldId = subList.get(j).attribute("eventid");
String time = subList.get(j).attributeValue("begintime");
String sb = "";
if(time != null){
sb = time.substring(6,8); // 截取dd
}
if(j<10) {
sb += "00" + (j+1);
}else if(j<100) {
sb += "0" + (j+1);
}
if(oldId != null){
oldId.setText(sb);
}
}
}
}

知识点4 生成修改后的xml

 /**
* 将修改后的xml文档重新生成
* @param document
* @param path
* @param encode
*/
public void write(Document document,String path,Map<String,String> propertiesMap) {
String channelEncoding = propertiesMap.get("channelEncoding");
if(channelEncoding != null) {
format.setEncoding(channelEncoding);
}
format.setNewLineAfterDeclaration(false);
File file;
try {
file = new File(path);
if(file.getParentFile().exists()) {
file.createNewFile();
}else {
file.getParentFile().mkdirs();
file.createNewFile();
}
XMLWriter write = new XMLWriter(new FileOutputStream(file,false),format);
write.write(document);
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}

dom4j 间隔插入节点 处理复杂的xml文档的相关教程结束。

《dom4j 间隔插入节点 处理复杂的xml文档.doc》

下载本文的Word格式文档,以方便收藏与打印。