[英]java: write to xml file
在 java 我需要创建 xml 文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<NikuDataBus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_customObjectInstance.xsd">
<Header action="write" externalSource="NIKU" objectType="customObjectInstance" version="8.1.0.4247"/>
<customObjectInstances objectCode="hen_allockey_p">
<instance instanceCode="MIG5033028" objectCode="hen_allockey_p"
parentInstanceCode="001260" parentObjectCode="project">
<CustomInformation>
<ColumnValue name="hen_from">200801</ColumnValue>
<ColumnValue name="name">MIG5033028</ColumnValue>
<ColumnValue name="code">MIG5033028</ColumnValue>
<OBSAssocs/>
<Security/>
</instance>
</customObjectInstances>
</NikuDataBus>
我在谷歌上找到了一些东西,但它不符合我的需求。 由于我是 java 的新手,我不知道如何适应我的需要。
谢谢您的帮助。
我建议您改用 JAXB 。 创建类 NikuDataBus、Header、CustomInformation 等。将它们标记为 @XmlEntity。 创建和填充对象。
NikyDataBus dataBus = new NikuDataBus();
dataBus.setHeader(....)
//etc, etc....
File f = new File("mydata.xml");
Marshaller m = JAXBContext.newInstance(NikuDataBus.class, Header.class, CustomInformation.class ).createMarshaller().marshal(dataBus, f)
不久前我遇到了类似的问题,我使用的网站让我对不同的编码方式有了很好的理解。
该网站为您提供了许多不同的编码 xml 的方法:字符串、DOM、SAX
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
//create string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
//Writing the string to a file
OutputStream outputStream;
byte buf[] = xmlString.getBytes();
outputStream = new FileOutputStream(file);
for (byte element : buf) {
outputStream.write(element);
}
outputStream.close();
buf = null;
我对XStream有很好的体验。 您只需制作对象并使用您想要的任何数据填充它们,最后您只需xstream.toXML(object);
获取 xml 的字符串。
您可以使用 GitHub 提供的 Scilca XML Progression package。
Node rootNode = Node.constructNode(<NikuDataBusxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_customObjectInstance.xsd">");
rootNode.addChildNode(Node.constructNode("<Header action="write" externalSource="NIKU" objectType="customObjectInstance" version="8.1.0.4247"/>"));
String customObj = "<customObjectInstances objectCode="hen_allockey_p">"
+ "<instance instanceCode="MIG5033028" objectCode="hen_allockey_p" parentInstanceCode="001260" parentObjectCode="project">"
+ "<CustomInformation>"
+ "<ColumnValue name="hen_from">200801</ColumnValue>"
+ "<ColumnValue name="name">MIG5033028</ColumnValue>"
+ "<ColumnValue name="code">MIG5033028</ColumnValue>"
+ "</CustomInformation>"
+ "<OBSAssocs/><Security/>"
+ "</instance>"
+ "</customObjectInstances>"
// Now build to customObject element using a VirtualXML Iterator
XMLIterator xi = new VirtualXML.XMLIterator(customObj);
Node customO = Node.readFromFile(xi);
rootNode.addChildNode(customO);
Document XmlDocument = new Document(rootNode);
XmlDocument.addXmlDeclaration(1.0, "UTF-8", null);
XMLWriter xw = XmlDocument.getWriter();
xw.write("D:/file.txt");
看起来您的 XML 是基于 XML 架构( ../xsd/nikuxog_customObjectInstance.xsd
)。 如果是这种情况,您可以使用XML Beans 。 Given the XML Schema, XML Beans will produce a set of Java classes (or a jar file) that you can use to create your XML progtrammatically.
优点是您的 XML 符合您的 XML 架构。 我发现这种方法在过去很有用,而且我对 XML Beans 有很好的经验。
我是这样解决的。 这是看起来很糟糕的代码,但它适用于我,也许有一些由复制和粘贴引起的错误
public class POIExcelReader {
private void setHenAllocKeyHeader(StringBuilder sb) {
sb.append ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
+ "<NikuDataBus xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"../xsd/nikuxog_customObjectInstance.xsd\">\r\n"
+ "<Header action=\"write\" externalSource=\"NIKU\"objectType=\"customObjectInstance\" version=\"8.1.0.4247\"/>\r\n"
+ "<customObjectInstances objectCode=\"hen_allockey_p\">\r\n"
+ "<instance instanceCode=\"MIG5033028\" objectCode=\"hen_allockey_p\" parentInstanceCode=\"001260\" parentObjectCode=\"project\">\r\n");
}
private void setHenAllocKeyBottom (StringBuilder sb) {
sb.append ("<OBSAssocs/>\r\n"
+"<Security/>\r\n"
+"</customObjectInstances>\r\n"
+ "</NikuDataBus>\r\n");
}
protected void jobRun() throws Exception {
StringBuilder sb = new StringBuilder();
setHenAllocKeyHeader(sb);
String prolog = sb.toString();
sb = new StringBuilder();
setHenAllocKeyBottom(sb);
String epilog = sb.toString();
FileOutputStream fos = new FileOutputStream("c:\\test\\osem.xml");
OutputStreamWriter osw = new OutputStreamWriter(fos, Charset.forName("UTF-8"));
osw.write(prolog);
osw.write(epilog);
osw.flush();
osw.close();
}
public static void main(String[] args){
try{
job.jobRun();
} catch (Exception e)
{
System.out.println("");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.