如何可用将这样格式的XML读成一行一行的数据存到数据库里?

jiangyunjian215 2015-05-07 02:59:25
<msg time='2014-10-22T22:00:32.924+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31366' version='1'>
<txt>Thread 1 cannot allocate new log, sequence 377
</txt>
</msg>
<msg time='2014-10-22T22:00:32.924+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31366'>
<txt>Private strand flush not complete
</txt>
</msg>
<msg time='2014-10-22T22:00:32.924+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31366'>
<txt> Current log# 1 seq# 376 mem# 0: /home/oracle/app/oracle/oradata/orcl/redo01.log
</txt>
</msg>
<msg time='2014-10-22T22:00:36.055+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31366'>
<txt>Thread 1 advanced to log sequence 377 (LGWR switch)
</txt>
</msg>
<msg time='2014-10-22T22:00:36.055+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31366'>
<txt> Current log# 2 seq# 377 mem# 0: /home/oracle/app/oracle/oradata/orcl/redo02.log
</txt>
</msg>
<msg time='2014-10-22T22:00:36.522+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31491'>
<txt>Archived Log entry 340 added for thread 1 sequence 376 ID 0x5273f832 dest 1:
</txt>
</msg>
<msg time='2014-10-22T22:01:40.474+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='dataserver12' host_addr='172.16.10.12' module=''
pid='31507'>
<txt>LNS: Standby redo logfile selected for thread 1 sequence 377 for destination LOG_ARCHIVE_DEST_2
</txt>
</msg>

能读到 time的值和标签对 <txt>中的内容就够了</txt>
存放到tb_alert(occur_time date,message varchar2(200))就可以了。

或者有什么简单的办法可以把xml数据展示为多行数据,
一个<msg></msg>中的内容对为一行。
...全文
398 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
踏雪无痕 2015-05-08
  • 打赏
  • 举报
回复
XML第三方解析控件很多的啊
固执的大叔 2015-05-08
  • 打赏
  • 举报
回复
XML Data Binding + XMLDocument 不知道能不能满足楼主的需求?
yct0605 2015-05-08
  • 打赏
  • 举报
回复
引用 6 楼 pathletboy 的回复:
简单的解析,正则表达式是比较方便的。
<msg time='(.*?)' [\s\S]*?<txt>(.*)\r\n </txt>\r\n</msg>
这个不错。
pathletboy 2015-05-08
  • 打赏
  • 举报
回复
简单的解析,正则表达式是比较方便的。
<msg time='(.*?)' [\s\S]*?<txt>(.*)\r\n </txt>\r\n</msg>


lyhoo163 2015-05-07
  • 打赏
  • 举报
回复
本想帮助你解析一下,一看XML不完整。 最好你提供完整的XML标准的文件。
zhenghuinb1025 2015-05-07
  • 打赏
  • 举报
回复
说明:我使用的是Delphi自带的XMLDocument1控件,首先楼主给的文本并不是标准的XML文档,所以先加工成相对准备的XML使用它能够解析。

var
  i:Integer;
  clist:TStringList;
begin
  clist:=TStringList.Create;
  clist.LoadFromFile('1.xml');
  XMLDocument1.XML.Clear;
  XMLDocument1.XML.Text:='<?xml version="1.0" encoding="gb2312"?><ROOT>'+clist.Text+'</ROOT>';
  XMLDocument1.Active:=true;
  for i:=0 to XMLDocument1.DocumentElement.ChildNodes.Count-1 do
  begin
    Memo1.Lines.Add(
    XMLDocument1.DocumentElement.ChildNodes[i].Attributes['time']+' '
    +XMLDocument1.DocumentElement.ChildNodes[i].ChildNodes[0].Text
    );
  end;
  clist.Free;
end;
nm_wyh 2015-05-07
  • 打赏
  • 举报
回复
Delphi中使用NatiiveXML第三访控件,解析这人小case了。网上搜索一下,自己动手弄一弄就知道了,别等别人给代码,还不如自己来的快。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧