`
laziest
  • 浏览: 9557 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

写了个解析xml然后插入数据库的程序

    博客分类:
  • Ruby
阅读更多
发表时间:2007年5月7日 16时36分45秒        评论/阅读(1/0)
没写过DB和XML解析,手忙脚乱了搞了5~6个小时才搞出来.

发现解析xml有两个需要注意的地方.

1.文件必须是采用utf-8编码存储,解析失败(这里害我浪费了好多时间)
2.取出来以后取采用iconv进行gbk->utf-8的转码,否则显示乱码.(这里至今不懂为什么,只是看了网上那样做)

发现程序还是没有超过70行,而且我还不知道写一些高级的语法,否则可能还短一点.

require 'rexml/document'
require 'iconv'
require 'mysql'
include REXML
$host = "localhost"
$user = "root"
$passwd = ""
$db = "friends"
$my = Mysql.connect($host, $user, $passwd)
$my.select_db $db
cov = Iconv.new( 'gbk', 'utf-8')
Dir.glob("*.html").sort.each do |fname|
  puts fname
File.open(fname) do |f|
xml = Document.new(f)
tds  = Array.new
xml.elements.each("//td"){|x| tds.push cov.iconv(x.text)}
p = Array.new
train_no,start_station,end_station,train_type,distance,duration,*p = ''
dongli = false
i = 1
train_no = tds[i]
start_station,end_station = tds[i+=2].split " — "
train_type = tds[i+=2]
dongli = true if train_type == "空调动力车组"
distance = tds[i+=2][0..-5]
duration = tds[i+=2].sub("小时",":").sub("分钟","")
#获得票价列表
n = -1
if dongli
  i+=1
  while tds[i+=1] != "站次"
    p[n+=1] = tds[i]
  end
else
  i+=1
  0.upto(6){|x| p[x] = tds[i+x+1]+tds[i+x+8]}
  i+=15
end
$my.query("insert into train (train_no,start_station,end_station,train_type,distance,duration,p0,p1,p2,p3,p4,p5,p6,p7) values ('#{train_no}','#{start_station}','#{end_station}','#{train_type}',#{distance},'#{duration}','#{p[0]}','#{p[1]}','#{p[2]}','#{p[3]}','#{p[4]}','#{p[5]}','#{p[6]}','#{p[7]}')")
i+= 5
station_num,station_name,arrive_time,leave_time,day_num,distance = ""
while i < tds.size - 1
  station_num = tds[i+=1]
  station_name = tds[i+=1]
  arrive_time = tds[i+=1]
  arrive_time = "0:00" if arrive_time == "--"
  leave_time = tds[i+=1]
  leave_time = "0:00" if leave_time == "--"
  day_num = tds[i+=1]
  if day_num == "当日"
    day_num = "0"
  elsif day_num == "第2日"
    day_num = "1"
  else
    day_num = "2"
  end
  distance = tds[i+=1]
$my.query("insert into train_station (train_no,station_num,station_name,arrive_time,leave_time,day_num,distance) values ('#{train_no}',#{station_num},'#{station_name}','#{arrive_time}','#{leave_time}',#{day_num},#{distance})")
end
puts "process train_no:#{train_no},train_stations:#{station_num.to_i+1}"
end
File.rename(fname,"complete\\#{fname}")
end
$my.close

分享到:
评论

相关推荐

    C#读取XML文件并写入数据库

    通过创建`XmlReader`实例,我们可以逐个节点遍历XML文件,每次读取一个节点时,解析数据并直接插入数据库。这种方法适用于大文件,防止一次性加载整个文件到内存中。 - 示例代码: ```csharp using (var reader =...

    kettle动态解析XML文件数据导入Oracle或者其他数据库

    kettle动态解析XML文件数据导入Oracle或者其他数据库 需求背景: 因为客户每天都要通过接口通过ftp上传固定格式的xml的文件,需要每天定时解析指定目录下的指定名称的xml文件导入Oracle和其他的数据库,所以开发了这...

    java txt文件解析xml格式添加到数据库

    1. 使用SAX解析XML: SAX是一个事件驱动的解析器,它在读取XML文件时触发事件,例如开始元素、结束元素等。以下是一个简单的SAX解析器示例: ```java import org.xml.sax.Attributes; import org.xml.sax....

    java 解析xml 并导入数据库(dom4j )

    通过解析XML文件`test01.xml`,获取每个需要导入的元素,然后批量执行数据库的插入操作。这只是一个基础示例,实际应用中可能需要根据具体需求进行调整,例如处理嵌套元素、处理属性和值的转换等。 总的来说,DOM4J...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    - 批量操作:为了提高效率,可以考虑使用批处理,将多个插入操作组合成一个批次,然后一次性提交到数据库。 3. **示例代码**(基于DOM解析): ```java import javax.xml.parsers.DocumentBuilderFactory; ...

    JSP页面解析XML并且存入数据库

    本项目中,我们探讨的是如何在JSP页面中解析XML文件,并将解析得到的数据存入MySQL数据库。 首先,让我们深入了解XML。XML是一种自描述的、结构化的数据格式,它允许我们以树形结构来组织数据,便于机器理解和处理...

    dom4j解析xml,连接oracle数据库

    3. 使用DOM4J解析的XML数据插入数据库: ```java Document document = ... // 解析XML的步骤 Element root = document.getRootElement(); // 假设XML结构如下: // // // &lt;product&gt;Product1 // &lt;quantity&gt;10 // ...

    解析xml和本地解析xml

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。...从CLOB字段中提取XML数据并插入数据库涉及多个步骤,需要注意数据安全和性能优化。

    delphi_xml.rar_delphi XML_delphi_xml_delphi解析xml_dephi xml数据库_xm

    4. 插入数据库:在解析完XML数据后,可以使用ADO(ActiveX Data Objects)或其他数据库组件(如DBExpress或FireDAC)将数据插入到数据库。首先建立数据库连接,创建SQL语句,然后通过`Command.Text`设置SQL,`...

    java解析xml并导入数据库(dom4j).doc

    本文主要讲解如何使用Java和DOM4J库解析XML...总之,这个示例展示了如何使用DOM4J解析XML文件,提取所需数据,并利用JDBC将数据批量插入到数据库中。这种方式适用于处理大量结构化的XML数据,提高了数据处理的效率。

    XML文件创建数据库表

    例如,我们可以先将XML文件内容读入一个CLOB字段,然后通过解析XML来创建表: ```sql CREATE TABLE xml_table (xml_data CLOB); INSERT INTO xml_table VALUES (BFILENAME('XML_DIR', 'data.xml')); SELECT DBMS_...

    解析wthrcdn.etouch的xml格式天气存入mysql数据库

    首先,我们需要请求接口获取XML数据,然后使用`ElementTree.fromstring()`函数解析XML字符串。 - 对于每个天气元素(如城市、日期、温度、湿度等),我们需要找到对应的XML标签,并提取其中的值。这通常通过`...

    xml_database.rar_xml_xml databa_xml 数据库_xml数据_数据库 XML

    1. **解析XML**:首先,我们需要解析XML文件,将其内容转化为结构化的数据。这可以通过使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来完成。 2. **映射...

    xml中的数据导入数据库

    Java提供了许多库,如JAXB(Java Architecture for XML Binding)和DOM(Document Object Model),用于解析XML并创建对象模型,然后这些对象可以通过JDBC接口插入数据库。 使用Java进行XML导入时,一般步骤包括: ...

    xml与Access数据库的转换案例

    - 使用Access的VBA(Visual Basic for Applications)编程接口,编写脚本将解析后的数据插入到相应的数据库表中。或者,可以通过Access的“外部数据”功能,直接导入XML文件,但这种方法可能需要手动配置映射关系。...

    xml连接数据库资料大全

    加载完成后,使用DOM解析XML并进行相应的处理。 8. **JavaScript读写XML文件**:除了加载XML,JavaScript还可以使用DOM API来修改XML文档的内容,然后将修改后的数据保存回XML文件。 综上所述,这个资料大全涵盖了...

    java读取全国省市xml,并插入数据库

    综上所述,完成“java读取全国省市xml,并插入数据库”这个任务,需要掌握Java XML解析(如SAX)、JDBC数据库操作以及SQL语句设计等关键技术。同时,对数据结构和异常处理的理解也是不可或缺的。通过这些步骤,我们...

    天气预报 .xml文件解析

    2. **解析XML文件**:使用解析库提供的API读取XML文件,创建一个ElementTree对象,然后遍历元素树,提取所需数据。例如,可以使用ElementTree的`find()`或`findall()`方法找到特定标签的元素,再通过`.text`属性获取...

    xml与数据库中数据的导入导出

    4. **XML与数据库的交互**:在导入XML到数据库时,首先需要解析XML文件,然后创建相应的SQL INSERT语句,通过JDBC执行这些语句。导出时,从数据库查询数据,生成XML文档,可以用DOM或StAX来实现。 5. **数据库操作*...

Global site tag (gtag.js) - Google Analytics