合并2 XML&;使用java提取此数据并将其存储在db表中
我是Java新手,我想做以下任务。请引导我做同样的事情 我想为下面的任务用Java(核心Java或servlet)编写源代码 使用对象、数据结构、接口、线程池、连接池(如果适用)。 如果需要或适用,执行任何验证:合并2 XML&;使用java提取此数据并将其存储在db表中,java,sql-server,xml,jakarta-ee,servlets,Java,Sql Server,Xml,Jakarta Ee,Servlets,我是Java新手,我想做以下任务。请引导我做同样的事情 我想为下面的任务用Java(核心Java或servlet)编写源代码 使用对象、数据结构、接口、线程池、连接池(如果适用)。 如果需要或适用,执行任何验证: 假设有两个xml文件: 第一个xml: <geodata> <person name="tom"> <address>2344 States Drive, MA 01213, USA</address> &l
<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>
美国马萨诸塞州州立大道2344号,邮编01213
333-222-2222
美国宾夕法尼亚州盖茨大道2345号,邮编:11213
444-222-2222
第二个xml:
<salarydata>
<person name="mat">
<salary>$3000</salary>
<pension>$500</pension>
</person>
<person name="tom">
<salary>$3500</salary>
<pension>$700</pension>
</person>
</salarydata>
$3000
$500
$3500
$700
从上述两个xml中,形成一个xml,比如persondata.xml(通过Java
程序,将上述两个文件作为输入),如下所示:
<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>
美国马萨诸塞州州立大道2344号,邮编01213
333-222-2222
$3500
$700
美国宾夕法尼亚州盖茨大道2345号,邮编:11213
444-222-2222
$3000
$500
Pl.在本练习中,只要您认为合适,就使用相关的工具/组件,如AJAX、J Query。下面是使用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);
}
Document xml1=new SAXBuilder().build(new StringReader)(\n)
+“\n”
+美国马萨诸塞州州立大道2344号,邮编01213\n
+“333-222-2222\n”
+“\n”
+“\n”
+美国宾夕法尼亚州11213盖茨大道2345号\n
+“444-222-2222\n”
+“\n”
+ ""));
文档xml2=new SAXBuilder().build(新建StringReader)(\n)
+“\n”
+“$3000\n”
+“$500\n”
+“\n”
+“\n”
+“$3500\n”
+“$700\n”
+“\n”
+ ""));
List geodata=xml1.getRootElement().getChildren();
List salarydata=xml2.getRootElement().getChildren();
//元素根=新元素(“persondata”);
用于(元素e:地理数据){
对于(要素e2:工资数据){
如果(e.getAttributeValue(“name”).equals(e2.getAttributeValue(“name”)){
e、 addContent(e2.removeContent());
}
}
}
Element rootNode=xml1.getRootElement();
setName(“persondata”);
新的XMLOutputter().output(xml1,System.out);
}
最后,我找到了我自己问题的答案,效果很好
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();
}
}
}
}
有多种方法可以做到这一点。您可以将整个xml传递给一个存储过程,该过程将解析xml并在表中插入数据,也可以使用java循环遍历xml并单独插入数据。