使用Java将两个XML文件合并到一个XML文件中
我一直坚持如何组合两个不同的XML文件(它具有相同的结构)。当我对它做一些研究时,人们会说必须使用像DOM或StAX这样的XML解析器。但不能与常规的IOStream一起使用?我目前正在尝试使用IOStream的帮助,但这不能解决我的目的,它更复杂。使用Java将两个XML文件合并到一个XML文件中
例如,我试过的是;
public class GUI {
public static void main(String[] args) throws Exception {
// Creates file to write to
Writer output = null;
output = new BufferedWriter(new FileWriter("C:\\merged.xml"));
String newline = System.getProperty("line.separator");
output.write("");
// Read in xml file 1
FileInputStream in = new FileInputStream("C:\\1.xml");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
if (strLine.contains("<MemoryDump>")){
strLine = strLine.replace("<MemoryDump>", "xmlns:xsi");
}
if (strLine.contains("</MemoryDump>")){
strLine = strLine.replace("</MemoryDump>", "xmlns:xsd");
}
output.write(newline);
output.write(strLine);
System.out.println(strLine);
}
// Read in xml file 2
FileInputStream in = new FileInputStream("C:\\2.xml");
BufferedReader br1 = new BufferedReader(new InputStreamReader(in));
String strLine1;
while ((strLine1 = br1.readLine()) != null) {
if (strLine1.contains("<MemoryDump>")){
strLine1 = strLine1.replace("<MemoryDump>", "");
}
if (strLine1.contains("</MemoryDump>")){
strLine1 = strLine1.replace("</MemoryDump>", "");
}
output.write(newline);
output.write(strLine1);
我请求您请让我知道如何通过添加其他内容来合并两个XML文件。如果你可以提供一些示例链接,那将是非常棒的!!
谢谢您提前..! System.out.println(strLine1); }
}
不完全相信你希望做什么。合并是否意味着:
a。您想要合并2个DOM的内容,并创建一个对象模型(一个有效的模型),并附加节点
b。你想合并这两个文件一个接一个,而不关心实际内容
如果它是一个,使用XML解析器。当然,你可以手动编写这些东西,并尝试将流处理成dom对象,但是你会重写很多这些解析器的用途。为什么要重写那些已经存在的东西。
如果是b,只是做一个愚蠢的副本。复制第一个文件(再次使用实用程序,例如apache常用的FileUtil允许您复制文件。除非必要,否则不要写入),打开一个IO流到复制的文件,然后读取和写入第二个文件。
作为一般规则,绝对不要在词法级别对XML进行任何处理:始终使用XML解析器。 (如果(a)您是一位XML专家,那么您可以打破此规则,因此您知道可能出错的地方,以及(b)您知道结果始终不必是正确的。)
其次,进行这种处理最简单的方法是使用为该作业设计的语言,如XSLT或XQuery。使用Java使它非常花费工作。
如果您对要合并的文件类型更具体,以及希望输出结果如何,我们可以给出更准确的答案。
是的,我可以延长我的怀疑。我想合并两个'XML'文件,输出也应该是'XML'文件。在第一个文件中,第二个文件中缺少两个nodeAttributes,第二个文件中有另一个标记
我正在尝试使用XSLT,但这使我的工作非常复杂。我可以知道什么是文件xslt =新文件(“”),我的意思是什么是文件作为xslt文件,在我的情况?因为我目前只有两个xml文件。 – dmurali 2012-04-12 09:26:04
你们中的任何人都可以告诉我如何在xml文件的中间添加
package com.cts.sterling.order;
//package com.academy.ecommerce.sterling.userexits;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import com.cts.sterling.custom.accelerators.util.XMLUtil;
public class MergeXml {
public static Document mergeXml(Document doc1, Document doc2)
throws Exception {
// Getting the attributes of OrderLine from document2 and document1
NodeList objOrderLineList2 = doc2.getElementsByTagName("OrderLine");
NodeList objOrderLineList1 = doc1.getElementsByTagName("OrderLine");
// Creating Element for OrderLine
Element eleOrderline2 = (Element) objOrderLineList2.item(0);
Element eleOrderline1 = (Element) objOrderLineList1.item(0);
// Declaring attributes as String array
String[] Line1={"LineType","LevelOfService"};
// Copying attributes from document2 to document1
XMLUtil.copyAttributes(eleOrderline2, eleOrderline1, Line1);
// Getting the attributes of Extn from document2 and document1
NodeList objExtn2 = doc2.getElementsByTagName("Extn");
NodeList objExtn1 =doc1.getElementsByTagName("Extn");
// Creating Element for Extn
Element eleExtn2 = (Element) objExtn2.item(0);
Element eleExtn1 = (Element) objExtn1.item(0);
// Declaring attributes as String array
String[] Line2={"ExtnMediaCode","ExtnLastName","ExtnGroupID"};
// Copying attributes from document2 to document1
XMLUtil.copyAttributes(eleExtn2, eleExtn1, Line2);
// Getting the attributes of WSIAddnlOrderLineData from document2 and document1
NodeList objAddln2 = doc2.getElementsByTagName("WSIAddnlOrderLineData");
NodeList objAddln1 =doc1.getElementsByTagName("WSIAddnlOrderLineData");
// Creating Element for WSIAddnlOrderLineData
Element eleAddln2 = (Element) objAddln2.item(0);
Element eleAddln1 = (Element) objAddln1.item(0);
// Declaring attributes as String array
String[] Line3 ={"ExtnShipMode" , "ExtnDeliverTogether","ExtnComponentReplacementIndicator","ExtnGiftCardRequiredIndicator","ExtnReplOriginalItemID",
"ExtnSpecialHandlingIndicator","ExtnSpecialHandlingReasonCode","ExtnCardType","ExtnCardClass","ExtnEcomSuborderNo","ExtnEcomOrderLineNo",
"ExtnPFSFlag","ExtnSVCCarrierServiceCode","ExtnSVCSCAC","ExtnSVCUpgradeFlag","ExtnSVCSKUType","ExtnSVCTo","ExtnSVCFrom"};
// Copying attributes from document2 to document1
XMLUtil.copyAttributes(eleAddln2, eleAddln1, Line3);
// Getting the attributes of Instruction from document2 and document1
NodeList objInst2 = doc2.getElementsByTagName("Instruction");
NodeList objInst1 =doc1.getElementsByTagName("Instruction");
// Creating Element for Instruction
Element eleInst2 = (Element) objInst2.item(0);
Element eleInst1 = (Element) objInst1.item(0);
// Declaring attributes as String array
String[] Line4 ={"InstructionText","InstructionType","SequenceNo","InstructionURL","InstructionUsage"};
// Copying attributes from document2 to document1
XMLUtil.copyAttributes(eleInst2, eleInst1, Line4);
//Printing output document
System.out.println(XMLUtil.getString(doc1));
return doc1;
}
//Main method
public static void main(String[] args) {
try{
File file1 = new File("D:/Handson/merge1.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc1 = dBuilder.parse(file1);
File file2 = new File("D:/Handson/merge2.xml");
Document doc2 = dBuilder.parse(file2);
//calling the method
mergeXml(doc1,doc2);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
我想合并两个XML文件并将其写入另一个XML文件。对不起,以前不清楚。 – dmurali 2012-04-11 17:32:04
如果合并文件的*内容*,请将两者(使用JDOM等解析器)读入dom对象,创建一个全新的对象,您将追加到该对象,遍历原始2个对象的模型,追加到新对象。冲洗并重复 – Michael 2012-04-11 17:42:01
我不确定我是否正确理解了你的观点。我将不得不使用JDOM解析器读取'file1',并从中取出必要的内容将其添加到'file2'中,是吗? – dmurali 2012-04-11 18:01:41