合并2 XML&使用java提取此数据并将其存储在db表中

时间:2014-03-14 14:27:19

标签: java sql-server xml java-ee servlets

我是Java的新手,我想做以下任务。请指导我2做同样的事。

我想用Java编写源代码(核心Java或servlet)来完成以下任务。

使用对象,数据结构,接口,线程池,适用的连接池。 如果需要或在任何地方适用,请执行任何验证:

  1. 我们说有2个xml文件:
  2. 第一个xml:

    <geodata>
     <person name="tom">
           <address>2344 States Drive, MA 01213, USA</address>
           <phonenumber>333-222-2222</phonenumber>
     </person>
     <person name="mat">
           <address>2345 Gates Drive, PA 11213, USA</address>
           <phonenumber>444-222-2222</phonenumber>
     </person>
    </geodata>
    

    第二个xml:

    <salarydata>
     <person name="mat">
           <salary>$3000</salary>
           <pension>$500</pension>
     </person>
     <person name="tom">
           <salary>$3500</salary>
           <pension>$700</pension>
     </person>
    </salarydata>
    

    从上面的2个xmls中,形成一个xml,比如persondata.xml(通过Java 程序,它将以上2个文件作为输入),如下所示:

    <persondata>
      <person name="tom">
           <address>2344 States Drive, MA 01213, USA</address>
           <phonenumber>333-222-2222</phonenumber>
           <salary>$3500</salary>
           <pension>$700</pension>
      </person>
      <person name="mat">
           <address>2345 Gates Drive, PA 11213, USA</address>
           <phonenumber>444-222-2222</phonenumber>
           <salary>$3000</salary>
           <pension>$500</pension>
      </person>
    </persondata>
    
    1. 使用Java从persondata.xml中提取此数据并存储在persondata数据库表中。 形成您自己的persondata表结构(保留上述persondata.xml元数据作为参考)。 数据库位于SQL Server

    2. 编写一个html表单,接受用户为每个数据库字段添加一些关键字(例如,States Drive或333或$ 700)以及搜索persondata数据库表并打印/回显匹配记录的相应操作Servlet在用户屏幕上(在本例中,汤姆的记录)。

    3. PL。在本练习中,只要您认为合适,就可以使用AJAX,J Query等相关工具/组件。

2 个答案:

答案 0 :(得分:0)

以下是使用JDOM的代码:

Document xml1 = new SAXBuilder().build(new StringReader("<geodata>\n"
                + " <person name=\"tom\">\n"
                + "       <address>2344 States Drive, MA 01213, USA</address>\n"
                + "       <phonenumber>333-222-2222</phonenumber>\n"
                + " </person>\n"
                + " <person name=\"mat\">\n"
                + "       <address>2345 Gates Drive, PA 11213, USA</address>\n"
                + "       <phonenumber>444-222-2222</phonenumber>\n"
                + " </person>\n"
                + "</geodata>"));
        Document xml2 = new SAXBuilder().build(new StringReader("<salarydata>\n"
                + " <person name=\"mat\">\n"
                + "       <salary>$3000</salary>\n"
                + "       <pension>$500</pension>\n"
                + " </person>\n"
                + " <person name=\"tom\">\n"
                + "       <salary>$3500</salary>\n"
                + "       <pension>$700</pension>\n"
                + " </person>\n"
                + "</salarydata>"));

        List<Element> geodata = xml1.getRootElement().getChildren();
        List<Element> salarydata = xml2.getRootElement().getChildren();
        //Element root = new Element("persondata");
        for (Element e : geodata) {
            for (Element e2 : salarydata) {
                if (e.getAttributeValue("name").equals(e2.getAttributeValue("name"))) {
                    e.addContent(e2.removeContent());
                }
            }
        }
        Element rootNode = xml1.getRootElement();
        rootNode.setName("persondata");
        new XMLOutputter().output(xml1, System.out);
    }

答案 1 :(得分:0)

最后,我找到了自己问题的答案,这很有效。

package com.techassignment;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Class1 {
    static public void main(String[] arg)
    {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = null;
    Document doc = null;
    Document doc2 = null;
    {
    try {
            db = dbf.newDocumentBuilder();
            doc = db.parse(new File("C:\\Users\\mkar\\workspace\\techassignment - new\\src\\com\\techassignment\\1st.xml"));
            doc2 = db.parse(new File("C:\\Users\\mkar\\workspace\\techassignment - new\\src\\com\\techassignment\\2nd.xml"));
            NodeList ndListFirstFile = doc.getElementsByTagName("person");

            Node nodeSalary = doc.importNode(doc2.getElementsByTagName("salary").item(0), true);
            Node nodePension = doc.importNode(doc2.getElementsByTagName("pension").item(0), true);
            Node nodeSalary1 = doc.importNode(doc2.getElementsByTagName("salary").item(1), true);
            Node nodePension1 = doc.importNode(doc2.getElementsByTagName("pension").item(1), true);

            ndListFirstFile.item(0).appendChild(nodeSalary);
            ndListFirstFile.item(0).appendChild(nodePension);
            ndListFirstFile.item(1).appendChild(nodeSalary1);
            ndListFirstFile.item(1).appendChild(nodePension1);

          TransformerFactory tFactory = TransformerFactory.newInstance();
          Transformer transformer = tFactory.newTransformer();
          transformer.setOutputProperty(OutputKeys.INDENT, "yes");  

          DOMSource source = new DOMSource(doc);
          StreamResult result = new StreamResult(new StringWriter());
          transformer.transform(source, result); 


          Writer output = null ;      
          output = new BufferedWriter(new FileWriter("C:\\Users\\mkar\\workspace\\techassignment - new\\src\\com\\techassignment\\testFinal.xml"));
          String xmlOutput = result.getWriter().toString();

          output.write(xmlOutput);

          output.close();
          System.out.println("XML Merged");

    } catch (ParserConfigurationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (SAXException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    } catch (IOException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    } catch (TransformerException e4) {
        // TODO Auto-generated catch block
        e4.printStackTrace();
    }

    }
    }
}