Как конвертировать CSV в XML Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как конвертировать CSV в XML Java?

Сообщение Anonymous »

пожалуйста, помогите подтвердить, что этот код будет работать, я добавляю, что этот фрагмент кода заключается в том, что xm - это любая относительная идея, которая требует добавления значения узла и текста во весь текст, что помогает, это должно быть относительно, помогает кодировать может быть активен
пакет com.codepressed.csvToXml;

Код: Выделить всё

import org.w3c.dom.Document;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
private static final Logger logger = Logger.getLogger(Main.class.getName());
private static final String CSV_COMMA = ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
private static final String CSV_SEMICOLON = ";(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
private static final String SEMICOLON_PARAMETER = "-s";

/**
* Executes the CSV to XML conversion
* @param args [0] = Input file*, [1] = Output file*, [2] = Elements names, [3] = csv type.
* @author Daniel Apesteguia Timoner (Codepressed)
*/
public static void main(String[] args) {

//Arg validator
if (args.length =3 && !args[3].equals(SEMICOLON_PARAMETER) ? args[2] : "element";
String csvSplit = (args.length>3 && args[3].equals(SEMICOLON_PARAMETER) || args.length>4 && args[4].equals(SEMICOLON_PARAMETER)) ? CSV_SEMICOLON:CSV_COMMA;

List   elements = XMLutils.readCsvFile(csvFile, csvSplit);
Document xmlDoc = XMLutils.createXmlDocument(elements, elementName);
if(XMLutils.writeXmlDocumentToFile(xmlDoc, xmlFile)){
logger.log(Level.INFO, "File was created successfully.");
}
}
}

package com.codepressed.csvToXml;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

import javax.xml.XMLConstants;
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 java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class XMLutils {

private static String rjct;
private static String verfElement;

private static final Logger logger = Logger.getLogger(XMLutils.class.getName());

private XMLutils(){
throw new IllegalStateException("This is a utility class.");
}

public static boolean writeXmlDocumentToFile(Document xmlDoc, String xmlFilePath) {
try {
TransformerFactory xmlTransformerFactory = TransformerFactory.newInstance();
//To protect from XXE attacks
xmlTransformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
xmlTransformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

Transformer xmlTransformer = xmlTransformerFactory.newTransformer();
xmlTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
xmlTransformer.setOutputProperty(OutputKeys.METHOD, "xml");
xmlTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
xmlTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

try (FileOutputStream outputStream = new FileOutputStream(xmlFilePath)) {
xmlTransformer.transform(new DOMSource(xmlDoc), new StreamResult(outputStream));
}
return true;

} catch (TransformerException | IOException e) {
logger.log(Level.SEVERE, "Error writing xml document to file", e);
return false;
}
}

public static Document createXmlDocument(List  xmlElements, String elementName) {
try {
DocumentBuilderFactory xmlFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder xmlBuilder = xmlFactory.newDocumentBuilder();
Document xmlDoc = xmlBuilder.newDocument();

Instant instant = Instant.now();

Element rootElement = xmlDoc.createElement("CstmrPmtStsRpt");
xmlDoc.appendChild(rootElement);

Element mainElement = xmlDoc.createElement("GrpHdr");
rootElement.appendChild(mainElement);

Element childElementMsgId = xmlDoc.createElement("MsgId");
mainElement.appendChild(childElementMsgId);
Text painValue = xmlDoc.createTextNode("PAIN0021611221065");
childElementMsgId.appendChild(painValue);

Element childElementCreDtTm = xmlDoc.createElement("CreDtTm");
mainElement.appendChild(childElementCreDtTm);
Text currentTime = xmlDoc.createTextNode(instant.toString());
childElementCreDtTm.appendChild(currentTime);

Element childElementInitgPty     = xmlDoc.createElement("InitgPty");
mainElement.appendChild(childElementInitgPty);

Element childElementId   = xmlDoc.createElement("Id");

childElementInitgPty.appendChild(childElementId);

Element childElementOrgId    = xmlDoc.createElement("OrgId");

childElementId.appendChild(childElementOrgId);

Element childElementBICOrBEI     = xmlDoc.createElement("BICOrBEI");

childElementOrgId.appendChild(childElementBICOrBEI);

Element mainElement1 = xmlDoc.createElement("OrgnlGrpInfAndSts");
rootElement.appendChild(mainElement1);

Element childElementOrgnlMsgId = xmlDoc.createElement("OrgnlMsgId");
mainElement1.appendChild(childElementOrgnlMsgId);

Element childElementOrgnlMsgNmId = xmlDoc.createElement("OrgnlMsgNmId");
mainElement1.appendChild(childElementOrgnlMsgNmId);

Element childElementOrgnlNbOfTxs = xmlDoc.createElement("OrgnlNbOfTxs");
mainElement1.appendChild(childElementOrgnlNbOfTxs);

Element childElementOrgnlCtrlSum = xmlDoc.createElement("OrgnlCtrlSum");
mainElement1.appendChild(childElementOrgnlCtrlSum);

Element childElementGrpSts = xmlDoc.createElement("GrpSts");
mainElement1.appendChild(childElementGrpSts);
Text rjctValue = xmlDoc.createTextNode(rjct);
childElementGrpSts.appendChild(rjctValue);

Element childElementStsRsnInf = xmlDoc.createElement("StsRsnInf");
mainElement1.appendChild(childElementStsRsnInf);

Element childElementRsn  = xmlDoc.createElement("Rsn");

childElementStsRsnInf.appendChild(childElementRsn);

Element childElementCd   = xmlDoc.createElement("Cd");
childElementRsn.appendChild(childElementCd);
String ver = verfElement.length() <  4 ? verfElement : verfElement.substring(0, 4);
Text verfElementValue = xmlDoc.createTextNode(ver);
childElementCd.appendChild(verfElementValue);

Element childElementAddtlInf     = xmlDoc.createElement("AddtlInf");

childElementStsRsnInf.appendChild(childElementAddtlInf);

//OrgnlPmtInfAndSts

if(xmlElements!=null) {
logger.log(Level.INFO, String.valueOf(xmlElements.size()));
int j =0;
for (String[] node : xmlElements) {
j++;
if(j==1){
continue;
}

Element mainElement2 = xmlDoc.createElement("OrgnlPmtInfAndSts");
rootElement.appendChild(mainElement2);

Element childElementOrgnlPmtInfId = xmlDoc.createElement("OrgnlPmtInfId");
mainElement2.appendChild(childElementOrgnlPmtInfId);
Text OrgnlPmtInfIdValue = xmlDoc.createTextNode(node[0].trim());
childElementOrgnlPmtInfId.appendChild(OrgnlPmtInfIdValue);

Element childElementOrgnlNbOfTxs1 = xmlDoc.createElement("OrgnlNbOfTxs");
mainElement2.appendChild(childElementOrgnlNbOfTxs1);

Element childElementOrgnlCtrlSum1 = xmlDoc.createElement("OrgnlCtrlSum");
mainElement2.appendChild(childElementOrgnlCtrlSum1);

Element childElementPmtInfSts = xmlDoc.createElement("PmtInfSts");
mainElement2.appendChild(childElementPmtInfSts);

Element childElementTxInfAndSts = xmlDoc.createElement("TxInfAndSts");
mainElement2.appendChild(childElementTxInfAndSts);

Element childElementOrgnlEndToEndId = xmlDoc.createElement("OrgnlEndToEndId");
mainElement2.appendChild(childElementOrgnlEndToEndId);
Text OrgnlEndToEndIdValue = xmlDoc.createTextNode(node[1].trim());
childElementOrgnlEndToEndId.appendChild(OrgnlEndToEndIdValue);

Element childElementTxSts = xmlDoc.createElement("TxSts");
mainElement2.appendChild(childElementTxSts);

Element childAddtlInf = xmlDoc.createElement("AddtlInf");
mainElement2.appendChild(childAddtlInf);
Text AddtlInfValue = xmlDoc.createTextNode(node[5].trim());
childAddtlInf.appendChild(AddtlInfValue);

// }
}

}

boolean headerDefined = false;
String[] header = new String[xmlElements.size()];

//            for (String[] node : xmlElements) {
//                if (headerDefined) {
//                    Element nodesElements = xmlDoc.createElement(elementName);
//                    mainElement.appendChild(nodesElements);
//
//                    for (int j = 0; j < node.length; j++) {
//                        node[j] = node[j].replace("\"", "").trim();
//                        Element nodesValues = xmlDoc.createElement(header[j]);
//                        nodesElements.appendChild(nodesValues);
//                        Text nodeTxt = xmlDoc.createTextNode(node[j]);
//                        nodesValues.appendChild(nodeTxt);
//                    }
//                } else {
//                    header = node;
//                    for (int j = 0; j < node.length; j++) {
//                        header[j] = header[j].replaceAll("[^a-zA-Z0-9]", "");
//                        if(isParsableToInt(header[j])) {
//                            header[j] = "node"  + header[j];
//                        }
//                    }
//                    headerDefined = true;
//                }
//            }
return xmlDoc;
} catch (ParserConfigurationException e) {
logger.log(Level.SEVERE, "Error creating the xml document", e);
return null;
}
}

public static List readCsvFile(String csvFilePath, String separator)  {
List elements = new ArrayList();

String[] verfName ;
try (BufferedReader reader = Files.newBufferedReader(Paths.get(csvFilePath))) {
String line;
while ((line = reader.readLine()) != null) {
String[] nodes = line.split(separator);
elements.add(nodes);
}
} catch(IOException e){
logger.log(Level.SEVERE, "Error reading the csv file", e);
}
verfName = elements.get(0);
String v=Arrays.toString(verfName);
String [] verf = v.split(",");

int i=0;
for(String m :verf){

i++;
if(i==5){
rjct = m.trim();
}
if(i==6){
verfElement = m.trim();
}

}
//logger.log(Level.INFO, Arrays.toString(verfName));

return elements;
}

public static boolean isParsableToInt(String input){
try{
Integer.parseInt(input);
return true;
}catch(NumberFormatException e){
logger.log(Level.INFO, "One of the columns is a int. We will add to it a 'node' prefix.");
return false;
}
}

}
Любой помогает достичь возможности во входной части

Подробнее здесь: https://stackoverflow.com/questions/793 ... o-xml-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»