Java 处理xml应用程序
我必须创建一个处理xml文件的java应用程序。确切地说,应用程序读取具有多个供应商的订单xml文件 例如,有一个订单,其中2个产品来自苹果,2个产品来自三星,1个产品来自诺基亚 应用程序必须为每个供应商创建一个xml文件。我应该有apple.xml和苹果的产品(从该order.xml),samsung.xml和三星的产品,nokia.xml和诺基亚的widh产品 我能够读取order.xml,将每个nodetag存储到一个变量中,因此我有一个变量‘price’、‘description’、‘supplier’等 但我不知道如何为每个供应商创建新的xml,以及如何存储唯一的供应商名称。因为如果我有3个苹果的产品,它将需要“苹果”3次 然后为每个供应商导出带有供应商产品的xmlJava 处理xml应用程序,java,xml,product,Java,Xml,Product,我必须创建一个处理xml文件的java应用程序。确切地说,应用程序读取具有多个供应商的订单xml文件 例如,有一个订单,其中2个产品来自苹果,2个产品来自三星,1个产品来自诺基亚 应用程序必须为每个供应商创建一个xml文件。我应该有apple.xml和苹果的产品(从该order.xml),samsung.xml和三星的产品,nokia.xml和诺基亚的widh产品 我能够读取order.xml,将每个nodetag存储到一个变量中,因此我有一个变量‘price’、‘description’、‘s
多谢各位 您是否尝试使用XML解析器?它可以帮助您轻松地读写XML文件。以下是两个例子:
- DOM解析器:
- SAX解析器:
- DOM解析器:
- SAX解析器:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.Element;
public class CreateXMLClass {
public CreateXMLClass() {
String xml1 = getXML1(new File("sample.xml"));
System.out.println(xml1);
System.out.println("");
System.out.println("");
String xml2 = getXML2();
System.out.println(xml2);
}
// creates xml file and returns the contents
private String getXML1(File f) {
String data="";
TransformerFactory transformerFactory;
Transformer transformer;
DOMSource source;
StreamResult result;
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root elements
Document doc = docBuilder.newDocument();
Element soapEnvelope = doc.createElement("soapenv:Envelope");
soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
doc.appendChild(soapEnvelope);
//elements
Element header = doc.createElement("soapenv:Header");
soapEnvelope.appendChild(header);
Element soapBody = doc.createElement("soapenv:Body");
soapEnvelope.appendChild(soapBody);
Element ns0 = doc.createElement("ns0:SampleApplication");
ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
soapBody.appendChild(ns0);
Element element01 = doc.createElement("Sample1");
element01.appendChild(doc.createTextNode("value1"));
ns0.appendChild(element01);
Element element02 = doc.createElement("Sample2");
element02.appendChild(doc.createTextNode("value2"));
ns0.appendChild(element02);
Element element03 = doc.createElement("Sample3");
element03.appendChild(doc.createTextNode("value3"));
ns0.appendChild(element03);
//write the content into xml file
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
source = new DOMSource(doc);
result = new StreamResult(f);
transformer.transform(source, result);
FileReader fr;
fr = new FileReader(f);
int d;
d = fr.read();
while (d != -1) {
data = data +(char)d;
d = fr.read();
}
fr.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch(ParserConfigurationException pce){
pce.printStackTrace();
} catch(TransformerException tfe){
tfe.printStackTrace();
}
return data;
}
// creates xml and returns the content
private String getXML2() {
String data="";
TransformerFactory transformerFactory;
Transformer transformer;
DOMSource source;
StreamResult result;
StringWriter writer;
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root elements
Document doc = docBuilder.newDocument();
Element soapEnvelope = doc.createElement("soapenv:Envelope");
soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
doc.appendChild(soapEnvelope);
//elements
Element header = doc.createElement("soapenv:Header");
soapEnvelope.appendChild(header);
Element soapBody = doc.createElement("soapenv:Body");
soapEnvelope.appendChild(soapBody);
Element ns0 = doc.createElement("ns0:SampleApplication");
ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
soapBody.appendChild(ns0);
Element element01 = doc.createElement("Sample1");
element01.appendChild(doc.createTextNode("value1"));
ns0.appendChild(element01);
Element element02 = doc.createElement("Sample2");
element02.appendChild(doc.createTextNode("value2"));
ns0.appendChild(element02);
Element element03 = doc.createElement("Sample3");
element03.appendChild(doc.createTextNode("value3"));
ns0.appendChild(element03);
writer = new StringWriter();
result = new StreamResult(writer);
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
source = new DOMSource(doc);
transformer.transform(source, result);
data = writer.getBuffer().toString();
} catch(ParserConfigurationException pce){
pce.printStackTrace();
} catch(TransformerException tfe){
tfe.printStackTrace();
}
return data;
}
public static void main(String args[]) {
new CreateXMLClass();
System.exit(0);
}
}
有几种方法可以构造xml。我这里只有两个例子
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.Element;
public class CreateXMLClass {
public CreateXMLClass() {
String xml1 = getXML1(new File("sample.xml"));
System.out.println(xml1);
System.out.println("");
System.out.println("");
String xml2 = getXML2();
System.out.println(xml2);
}
// creates xml file and returns the contents
private String getXML1(File f) {
String data="";
TransformerFactory transformerFactory;
Transformer transformer;
DOMSource source;
StreamResult result;
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root elements
Document doc = docBuilder.newDocument();
Element soapEnvelope = doc.createElement("soapenv:Envelope");
soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
doc.appendChild(soapEnvelope);
//elements
Element header = doc.createElement("soapenv:Header");
soapEnvelope.appendChild(header);
Element soapBody = doc.createElement("soapenv:Body");
soapEnvelope.appendChild(soapBody);
Element ns0 = doc.createElement("ns0:SampleApplication");
ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
soapBody.appendChild(ns0);
Element element01 = doc.createElement("Sample1");
element01.appendChild(doc.createTextNode("value1"));
ns0.appendChild(element01);
Element element02 = doc.createElement("Sample2");
element02.appendChild(doc.createTextNode("value2"));
ns0.appendChild(element02);
Element element03 = doc.createElement("Sample3");
element03.appendChild(doc.createTextNode("value3"));
ns0.appendChild(element03);
//write the content into xml file
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
source = new DOMSource(doc);
result = new StreamResult(f);
transformer.transform(source, result);
FileReader fr;
fr = new FileReader(f);
int d;
d = fr.read();
while (d != -1) {
data = data +(char)d;
d = fr.read();
}
fr.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch(ParserConfigurationException pce){
pce.printStackTrace();
} catch(TransformerException tfe){
tfe.printStackTrace();
}
return data;
}
// creates xml and returns the content
private String getXML2() {
String data="";
TransformerFactory transformerFactory;
Transformer transformer;
DOMSource source;
StreamResult result;
StringWriter writer;
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root elements
Document doc = docBuilder.newDocument();
Element soapEnvelope = doc.createElement("soapenv:Envelope");
soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
doc.appendChild(soapEnvelope);
//elements
Element header = doc.createElement("soapenv:Header");
soapEnvelope.appendChild(header);
Element soapBody = doc.createElement("soapenv:Body");
soapEnvelope.appendChild(soapBody);
Element ns0 = doc.createElement("ns0:SampleApplication");
ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
soapBody.appendChild(ns0);
Element element01 = doc.createElement("Sample1");
element01.appendChild(doc.createTextNode("value1"));
ns0.appendChild(element01);
Element element02 = doc.createElement("Sample2");
element02.appendChild(doc.createTextNode("value2"));
ns0.appendChild(element02);
Element element03 = doc.createElement("Sample3");
element03.appendChild(doc.createTextNode("value3"));
ns0.appendChild(element03);
writer = new StringWriter();
result = new StreamResult(writer);
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
source = new DOMSource(doc);
transformer.transform(source, result);
data = writer.getBuffer().toString();
} catch(ParserConfigurationException pce){
pce.printStackTrace();
} catch(TransformerException tfe){
tfe.printStackTrace();
}
return data;
}
public static void main(String args[]) {
new CreateXMLClass();
System.exit(0);
}
}
是的,我使用DOM解析器。我能够读取xml文件。但是我不知道如何从原始xml为每个供应商编写xml文件。下面的示例是:,尝试创建一个文档,在创建文档后,您可以用之前读取的第一个xml的内容填充它,包括您需要的标记。最后,您可以将内容写入文件。只需重复此过程,即可创建所需数量的文件:)非常有用。谢谢是的,我使用DOM解析器。我能够读取xml文件。但是我不知道如何从原始xml为每个供应商编写xml文件。下面的示例是:,尝试创建一个文档,在创建文档后,您可以用之前读取的第一个xml的内容填充它,包括您需要的标记。最后,您可以将内容写入文件。只需重复此过程,即可创建所需数量的文件:)非常有用。谢谢