Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7bf2396

Browse files
committed
Main update -> Updated arg handling
1 parent5a64d99 commit7bf2396

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

‎src/main/java/com/codepressed/CSVtoXML/Main.java‎renamed to ‎src/main/java/com/codepressed/csvToXml/Main.java‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
packagecom.codepressed.CSVtoXML;
1+
packagecom.codepressed.csvToXml;
22

33

44
importorg.w3c.dom.Document;
@@ -9,11 +9,13 @@
99

1010
publicclassMain {
1111
privatestaticfinalLoggerlogger =Logger.getLogger(Main.class.getName());
12+
privatestaticfinalStringCSV_COMMA =",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
13+
privatestaticfinalStringCSV_SEMICOLON =";(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
14+
privatestaticfinalStringSEMICOLON_PARAMETER ="-s";
1215

1316
/**
1417
* Executes the CSV to XML conversion
15-
*
16-
* @param args [0] = Input file, [1] = Output file, [2] = Elements names, [3] = csv type.
18+
* @param args [0] = Input file*, [1] = Output file*, [2] = Elements names, [3] = csv type.
1719
* @author Daniel Apesteguia Timoner (Codepressed)
1820
*/
1921
publicstaticvoidmain(String[]args) {
@@ -26,12 +28,14 @@ public static void main(String[] args) {
2628
//Vars Initialization
2729
StringcsvFile =args[0];
2830
StringxmlFile =args[1];
29-
StringelementName =args.length>=3 && !args[3].equals("-s") ?args[2] :"element";
30-
StringcsvSplit = (args.length>3 &&args[3].equals("-s") ||args.length>4 &&args[4].equals("-s")) ?";(?=([^\"]*\"[^\"]*\")*[^\"]*$)":",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
31+
StringelementName =args.length>=3 && !args[3].equals(SEMICOLON_PARAMETER) ?args[2] :"element";
32+
StringcsvSplit = (args.length>3 &&args[3].equals(SEMICOLON_PARAMETER) ||args.length>4 &&args[4].equals(SEMICOLON_PARAMETER)) ?CSV_SEMICOLON:CSV_COMMA;
3133

3234
List <String[]>elements =XMLutils.readCsvFile(csvFile,csvSplit);
3335
DocumentxmlDoc =XMLutils.createXmlDocument(elements,elementName);
34-
XMLutils.writeXmlDocumentToFile(xmlDoc,xmlFile);
36+
if(XMLutils.writeXmlDocumentToFile(xmlDoc,xmlFile)){
37+
logger.log(Level.INFO,"File was created successfully.");
38+
}
3539
}
3640
}
3741

‎src/main/java/com/codepressed/CSVtoXML/XMLutils.java‎renamed to ‎src/main/java/com/codepressed/csvToXml/XMLutils.java‎

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
packagecom.codepressed.CSVtoXML;
1+
packagecom.codepressed.csvToXml;
22

33
importorg.w3c.dom.Document;
44
importorg.w3c.dom.Element;
55
importorg.w3c.dom.Text;
66

7+
importjavax.xml.XMLConstants;
78
importjavax.xml.parsers.DocumentBuilder;
89
importjavax.xml.parsers.DocumentBuilderFactory;
910
importjavax.xml.parsers.ParserConfigurationException;
@@ -14,7 +15,6 @@
1415
importjavax.xml.transform.dom.DOMSource;
1516
importjavax.xml.transform.stream.StreamResult;
1617
importjava.io.BufferedReader;
17-
importjava.io.File;
1818
importjava.io.FileOutputStream;
1919
importjava.io.IOException;
2020
importjava.nio.file.Files;
@@ -28,30 +28,35 @@ public class XMLutils {
2828

2929
privatestaticfinalLoggerlogger =Logger.getLogger(XMLutils.class.getName());
3030

31+
privateXMLutils(){
32+
thrownewIllegalStateException("This is a utility class.");
33+
}
34+
3135
publicstaticbooleanwriteXmlDocumentToFile(DocumentxmlDoc,StringxmlFilePath) {
3236
try {
3337
TransformerFactoryxmlTransformerFactory =TransformerFactory.newInstance();
38+
//To protect from XXE attacks
39+
xmlTransformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD,"");
40+
xmlTransformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET,"");
41+
3442
TransformerxmlTransformer =xmlTransformerFactory.newTransformer();
3543
xmlTransformer.setOutputProperty(OutputKeys.INDENT,"yes");
3644
xmlTransformer.setOutputProperty(OutputKeys.METHOD,"xml");
3745
xmlTransformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
3846
xmlTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
3947

40-
try (FileOutputStreamoutputStream =newFileOutputStream(newFile(xmlFilePath))) {
48+
try (FileOutputStreamoutputStream =newFileOutputStream(xmlFilePath)) {
4149
xmlTransformer.transform(newDOMSource(xmlDoc),newStreamResult(outputStream));
4250
}
4351
returntrue;
52+
4453
}catch (TransformerException |IOExceptione) {
4554
logger.log(Level.SEVERE,"Error writing xml document to file",e);
4655
returnfalse;
4756
}
4857
}
4958

50-
publicstaticDocumentcreateXmlDocument(List<String[]>XMLelements,StringelementName) {
51-
if (elementName ==null) {
52-
elementName ="element";
53-
}
54-
59+
publicstaticDocumentcreateXmlDocument(List<String[]>xmlElements,StringelementName) {
5560
try {
5661
DocumentBuilderFactoryxmlFactory =DocumentBuilderFactory.newInstance();
5762
DocumentBuilderxmlBuilder =xmlFactory.newDocumentBuilder();
@@ -63,15 +68,15 @@ public static Document createXmlDocument(List<String[]> XMLelements, String elem
6368
rootElement.appendChild(mainElement);
6469

6570
booleanheaderDefined =false;
66-
String[]header =newString[XMLelements.size()];
71+
String[]header =newString[xmlElements.size()];
6772

68-
for (String[]node :XMLelements) {
73+
for (String[]node :xmlElements) {
6974
if (headerDefined) {
7075
ElementnodesElements =xmlDoc.createElement(elementName);
7176
mainElement.appendChild(nodesElements);
7277

7378
for (intj =0;j <node.length;j++) {
74-
node[j] =node[j].replaceAll("\"","").trim();
79+
node[j] =node[j].replace("\"","").trim();
7580
ElementnodesValues =xmlDoc.createElement(header[j]);
7681
nodesElements.appendChild(nodesValues);
7782
TextnodeTxt =xmlDoc.createTextNode(node[j]);
@@ -81,10 +86,8 @@ public static Document createXmlDocument(List<String[]> XMLelements, String elem
8186
header =node;
8287
for (intj =0;j <node.length;j++) {
8388
header[j] =header[j].replaceAll("[^a-zA-Z0-9]","");
84-
try {
85-
Integer.parseInt(header[j]);
89+
if(isParsableToInt(header[j])) {
8690
header[j] ="node" +header[j];
87-
}catch (NumberFormatExceptione) {
8891
}
8992
}
9093
headerDefined =true;
@@ -97,6 +100,7 @@ public static Document createXmlDocument(List<String[]> XMLelements, String elem
97100
}
98101
}
99102

103+
100104
publicstaticList<String[]>readCsvFile(StringcsvFilePath,Stringseparator) {
101105
List<String[]>elements =newArrayList<>();
102106

@@ -112,4 +116,14 @@ public static List<String[]> readCsvFile(String csvFilePath, String separator)
112116
returnelements;
113117
}
114118

119+
publicstaticbooleanisParsableToInt(Stringinput){
120+
try{
121+
Integer.parseInt(input);
122+
returntrue;
123+
}catch(NumberFormatExceptione){
124+
logger.log(Level.INFO,"One of the columns is a int. We will add to it a 'node' prefix.");
125+
returnfalse;
126+
}
127+
}
128+
115129
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp