我有一个场景,用平面文件写的员工记录,如:
flatFile.txt
============
1|name1|dept1|10000
2|name2|dept2|12000
3|name3|dept3|9500
....
....
现在我想读取这个平面文件,并且每次都将上面的员工记录转换为一些新的xml文件,所以最后我应该将xml文件包含以下数据:
<EMPLOYEES>
<EMPLOYEE>
<ID>1</ID>
<NAME>name1</NAME>
<DEPARTMENT>dept1</DEPARTMENT>
<SALARY>10000</SALARY>
</EMPLOYEE>
<EMPLOYEE>
<ID>2</ID>
<NAME>name2</NAME>
<DEPARTMENT>dept2</DEPARTMENT>
<SALARY>12000</SALARY>
</EMPLOYEE>
...
...
</EMPLOYEES>
现在要实现这个概念,我需要处理数据的验证,如:
如果任何验证失败,则需要将它们与错误行号一起反映在xml文件中,如:
<NAME type="Error" Line="2"></NAME> (name length is greater than 20 in 2nd record of a flat file)
或
<EMPLOYEE type="Error" Line="1"></EMPLOYEE> (first record doesn't contains enough fields)
现在,应用程序需要以这样的方式进行设计,即组件可以通过替代方案进行插拔。对于例如应该可以用分隔符替换用于解析输入文件的解析器,另一个解析器将其解析为固定长度。
所以我不得不以分层方式设计概念,如
Parsing -> Validation -> Output Generation.
现在为了实现这个概念,我给出了一个想法,如下:
任何人都可以给我更好的建议或任何提示来实现实施吗?
答案 0 :(得分:3)
自从Java SE 6以来,我将使用JDK / JRE中提供的库来执行以下操作。
XMLStreamWriter
以将XML内容输出到文件中。XMLStreamWriter
编写根元素。Employee
对象XMLStreamWriter
XMLStreamWriter
结束文档。<强>更新强>
执行实际验证有不同的选项,下面我将演示如何在JAXB实现可用于生成所需结果的对象模型中表示结果信息。
<强>员工强>
package forum12446506;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="EMPLOYEE")
public class Employee {
@XmlAttribute(name="Line")
Integer line;
@XmlAttribute
String type;
@XmlElement(name="ID")
Value id;
@XmlElement(name="NAME")
Value name;
@XmlElement(name="DEPARTMENT")
Value department;
@XmlElement(name="SALARY")
Value salary;
public Employee() {
}
public Employee(int line, String type) {
this.line = line;
this.type = type;
}
}
<强>值强>
package forum12446506;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Value {
@XmlAttribute(name="Line")
Integer line;
@XmlAttribute
String type;
@XmlValue
String value;
public Value() {
}
public Value(Integer line, String type, String value) {
this.line = line;
this.type = type;
this.value = value;
}
}
<强>输出强>
<EMPLOYEE>
<ID>1</ID>
<NAME type="Error" Line="1"/>
</EMPLOYEE>
<EMPLOYEE type="Error" Line="2"/>
答案 1 :(得分:1)
阅读下面提到的教程链接,了解如何将平面文件转换为xml,,请完整阅读,此外,为您提供本教程的原因是你知道没有神奇的jumbo - mumbo将平面文件直接转换为xml ,but yes there is a proper way to do it.....