【问题标题】:Merge 2 XML & Extract this data using java and store it in db table合并 2 XML 并使用 java 提取数据并将其存储在 db 表中
【发布时间】:2014-04-19 21:49:53
【问题描述】:

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

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

在适用的情况下使用对象、数据结构、接口、线程池、连接池。 如果需要或在任何适用的情况下执行任何验证:

  1. 假设有 2 个 xml 文件:

第一个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 个 xml 中,形成一个单独的 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 db 表中。 形成自己的 persondata 表结构(保留上述 persondata.xml 元数据作为参考)。 数据库在 SQL Server 中

  2. 编写一个 html 表单,该表单接受来自用户的一些关键字,用于每个 db 字段(例如,States Drive 或 333 或 $700)和一个相应的操作 Servlet,用于搜索 persondata db 表并打印/回显匹配的记录到用户屏幕上(在本例中是汤姆的记录)。

Pl。在本练习中使用相关工具/组件,例如 AJAX、J Query,只要您认为合适。

【问题讨论】:

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


    【解决方案1】:

    下面是使用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);
        }
    

    【讨论】:

    • 有多种方法可以做到这一点。您可以将整个 xml 传递给将解析 xml 并将数据插入表中的存储过程,也可以使用 java 循环遍历 xml 并单独插入数据。
    【解决方案2】:

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

    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();
        }
    
        }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多