发表时间: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
分享到:
相关推荐
通过创建`XmlReader`实例,我们可以逐个节点遍历XML文件,每次读取一个节点时,解析数据并直接插入数据库。这种方法适用于大文件,防止一次性加载整个文件到内存中。 - 示例代码: ```csharp using (var reader =...
kettle动态解析XML文件数据导入Oracle或者其他数据库 需求背景: 因为客户每天都要通过接口通过ftp上传固定格式的xml的文件,需要每天定时解析指定目录下的指定名称的xml文件导入Oracle和其他的数据库,所以开发了这...
1. 使用SAX解析XML: SAX是一个事件驱动的解析器,它在读取XML文件时触发事件,例如开始元素、结束元素等。以下是一个简单的SAX解析器示例: ```java import org.xml.sax.Attributes; import org.xml.sax....
通过解析XML文件`test01.xml`,获取每个需要导入的元素,然后批量执行数据库的插入操作。这只是一个基础示例,实际应用中可能需要根据具体需求进行调整,例如处理嵌套元素、处理属性和值的转换等。 总的来说,DOM4J...
- 批量操作:为了提高效率,可以考虑使用批处理,将多个插入操作组合成一个批次,然后一次性提交到数据库。 3. **示例代码**(基于DOM解析): ```java import javax.xml.parsers.DocumentBuilderFactory; ...
本项目中,我们探讨的是如何在JSP页面中解析XML文件,并将解析得到的数据存入MySQL数据库。 首先,让我们深入了解XML。XML是一种自描述的、结构化的数据格式,它允许我们以树形结构来组织数据,便于机器理解和处理...
3. 使用DOM4J解析的XML数据插入数据库: ```java Document document = ... // 解析XML的步骤 Element root = document.getRootElement(); // 假设XML结构如下: // // // <product>Product1 // <quantity>10 // ...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。...从CLOB字段中提取XML数据并插入数据库涉及多个步骤,需要注意数据安全和性能优化。
4. 插入数据库:在解析完XML数据后,可以使用ADO(ActiveX Data Objects)或其他数据库组件(如DBExpress或FireDAC)将数据插入到数据库。首先建立数据库连接,创建SQL语句,然后通过`Command.Text`设置SQL,`...
本文主要讲解如何使用Java和DOM4J库解析XML...总之,这个示例展示了如何使用DOM4J解析XML文件,提取所需数据,并利用JDBC将数据批量插入到数据库中。这种方式适用于处理大量结构化的XML数据,提高了数据处理的效率。
例如,我们可以先将XML文件内容读入一个CLOB字段,然后通过解析XML来创建表: ```sql CREATE TABLE xml_table (xml_data CLOB); INSERT INTO xml_table VALUES (BFILENAME('XML_DIR', 'data.xml')); SELECT DBMS_...
首先,我们需要请求接口获取XML数据,然后使用`ElementTree.fromstring()`函数解析XML字符串。 - 对于每个天气元素(如城市、日期、温度、湿度等),我们需要找到对应的XML标签,并提取其中的值。这通常通过`...
1. **解析XML**:首先,我们需要解析XML文件,将其内容转化为结构化的数据。这可以通过使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来完成。 2. **映射...
Java提供了许多库,如JAXB(Java Architecture for XML Binding)和DOM(Document Object Model),用于解析XML并创建对象模型,然后这些对象可以通过JDBC接口插入数据库。 使用Java进行XML导入时,一般步骤包括: ...
- 使用Access的VBA(Visual Basic for Applications)编程接口,编写脚本将解析后的数据插入到相应的数据库表中。或者,可以通过Access的“外部数据”功能,直接导入XML文件,但这种方法可能需要手动配置映射关系。...
加载完成后,使用DOM解析XML并进行相应的处理。 8. **JavaScript读写XML文件**:除了加载XML,JavaScript还可以使用DOM API来修改XML文档的内容,然后将修改后的数据保存回XML文件。 综上所述,这个资料大全涵盖了...
综上所述,完成“java读取全国省市xml,并插入数据库”这个任务,需要掌握Java XML解析(如SAX)、JDBC数据库操作以及SQL语句设计等关键技术。同时,对数据结构和异常处理的理解也是不可或缺的。通过这些步骤,我们...
2. **解析XML文件**:使用解析库提供的API读取XML文件,创建一个ElementTree对象,然后遍历元素树,提取所需数据。例如,可以使用ElementTree的`find()`或`findall()`方法找到特定标签的元素,再通过`.text`属性获取...
4. **XML与数据库的交互**:在导入XML到数据库时,首先需要解析XML文件,然后创建相应的SQL INSERT语句,通过JDBC执行这些语句。导出时,从数据库查询数据,生成XML文档,可以用DOM或StAX来实现。 5. **数据库操作*...