xml文档转换存储到sql sever数据库中
本人最近在做一个题为xml在关系数据库中存储技术的实现的项目。用java做,要求能够导入一个不太复杂的xml文档,经解析后按照一定的算法将树形结构的xml节点转换成平整的...
本人最近在做一个题为xml在关系数据库中存储技术的实现的项目。用java做,要求能够导入一个不太复杂的xml文档,经解析后按照一定的算法将树形结构的xml节点转换成平整的关系表结构。
由于对xml文档不太熟悉,也没有好的转换算法。
请问各位高手该怎么设计表?如何将解析出来的节点自动的存到对应的表中?用什么方法解析xml比较好?有现成的例子最好,可以的话追加多少分不是问题~~
你说的是用SQL Sever的函数?我得用Java编程实现啊。不建表那怎么插入xml结点呢? 展开
由于对xml文档不太熟悉,也没有好的转换算法。
请问各位高手该怎么设计表?如何将解析出来的节点自动的存到对应的表中?用什么方法解析xml比较好?有现成的例子最好,可以的话追加多少分不是问题~~
你说的是用SQL Sever的函数?我得用Java编程实现啊。不建表那怎么插入xml结点呢? 展开
展开全部
分无所谓,如果是你要的看着给吧。不知道你了解多少,我就尽量详细点,罗嗦点。
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import java.sql.*; //估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import java.io.*;
import javax.xml.parsers.*; //这个包是用来解析XML的
import org.w3c.dom.*; //工厂包
import org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public class XmlToSql{
public static void main(string[] args){
//根据XML节点设计出的表字段,我先假设有3个字段
String id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document doc=builder.parse(new FileInputStrem(new File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int i=0;i<nodes.getLength(),i++){ //开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element node=(Element)nodes.item(i); //先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue(); //用这个方法取出XML中 属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化, .NET就方便的多。都写到这里了就写完吧
sql="insert into a values("+id+"','"+username+"'+'"password+"')";
con.createStatement().executeUpdate(sql);
}catch(Exception e{e.printStackTrace();}
}
}
//好了,你的XL信息循环插入表中了,其实XML结构很关键,这里是但节点循环,有时候出现多子节点,或者非正规体那就要根据XML的结构来循环输入了,不过大体方法和思路都是一样的。由于直接就在这里写的代码,没在IDE中写,所以括号匹配方面也许会出小问题,见谅
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import java.sql.*; //估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import java.io.*;
import javax.xml.parsers.*; //这个包是用来解析XML的
import org.w3c.dom.*; //工厂包
import org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public class XmlToSql{
public static void main(string[] args){
//根据XML节点设计出的表字段,我先假设有3个字段
String id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document doc=builder.parse(new FileInputStrem(new File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int i=0;i<nodes.getLength(),i++){ //开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element node=(Element)nodes.item(i); //先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue(); //用这个方法取出XML中 属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化, .NET就方便的多。都写到这里了就写完吧
sql="insert into a values("+id+"','"+username+"'+'"password+"')";
con.createStatement().executeUpdate(sql);
}catch(Exception e{e.printStackTrace();}
}
}
//好了,你的XL信息循环插入表中了,其实XML结构很关键,这里是但节点循环,有时候出现多子节点,或者非正规体那就要根据XML的结构来循环输入了,不过大体方法和思路都是一样的。由于直接就在这里写的代码,没在IDE中写,所以括号匹配方面也许会出小问题,见谅
展开全部
分无所谓,如果是你要的看着给吧。不知道你了解多少,我就尽量详细点,罗嗦点。
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import
java.sql.*;
//估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import
java.io.*;
import
javax.xml.parsers.*;
//这个包是用来解析XML的
import
org.w3c.dom.*;
//工厂包
import
org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public
class
XmlToSql{
public
static
void
main(string[]
args){
//根据XML节点设计出的表字段,我先假设有3个字段
String
id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory
factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder
builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document
doc=builder.parse(new
FileInputStrem(new
File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList
nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int
i=0;i<nodes.getLength(),i++){
//开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element
node=(Element)nodes.item(i);
//先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue();
//用这个方法取出XML中
属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化,
.NET就方便的多。都写到这里了就写完吧
sql="insert
into
a
values("+id+"','"+username+"'+'"passw
查看原帖>>
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import
java.sql.*;
//估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import
java.io.*;
import
javax.xml.parsers.*;
//这个包是用来解析XML的
import
org.w3c.dom.*;
//工厂包
import
org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public
class
XmlToSql{
public
static
void
main(string[]
args){
//根据XML节点设计出的表字段,我先假设有3个字段
String
id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory
factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder
builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document
doc=builder.parse(new
FileInputStrem(new
File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList
nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int
i=0;i<nodes.getLength(),i++){
//开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element
node=(Element)nodes.item(i);
//先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue();
//用这个方法取出XML中
属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化,
.NET就方便的多。都写到这里了就写完吧
sql="insert
into
a
values("+id+"','"+username+"'+'"passw
查看原帖>>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
导入如果文档不大的话可以用openxml函数来实现.select * into <tablename> from openxml() with()这样就行了,表不用先行定义。有问题可以M我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询