【发布时间】:2012-03-17 01:19:29
【问题描述】:
我有一个包含以下条目的文本文件
1
244699000
52.467286666666666
4.611188333333334
我想将其转换为如下所示的 XML 文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<SYSTEM-TRACKS>
<AIS-SENSOR ID ="1">
<MMSI>244699000 </MMSI>
<LATITUDE> 52.467286666666666 </LATITUDE>
<LONGITUDE> 4.611188333333334 </LONGITUDE>
</AIS-SENSOR>
</SYSTEM-TRACKS>
这是我找到的代码
public class ToXML {
BufferedReader in;
StreamResult out;
TransformerHandler th;
AttributesImpl atts;
public static void main(String args[]) {
new ToXML().doit();
}
public void doit() {
try {
in = new BufferedReader(new FileReader("data"));
out = new StreamResult("data.xml");
initXML();
String str;
while ((str = in.readLine()) != null) {
process(str);
}
in.close();
closeXML();
} catch (Exception e) {
e.printStackTrace();
}
}
public void initXML() throws ParserConfigurationException,
TransformerConfigurationException, SAXException {
// JAXP + SAX
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory
.newInstance();
th = tf.newTransformerHandler();
Transformer serializer = th.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
// pretty XML output
serializer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "4");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
th.setResult(out);
th.startDocument();
atts = new AttributesImpl();
th.startElement("", "", "SYSTEM-TRACKS", atts);
}
public void process(String s) throws SAXException {
String elements[] = s.split("\\r?\\n");
atts.clear();
th.startElement("", "", "AIS-SENSOR", atts);
th.characters(elements[0].toCharArray(), 0, elements[0].length());
th.startElement("", "", "MMSI", atts);
th.characters(elements[1].toCharArray(), 0, elements[1].length());
th.endElement("", "", "MMSI");
th.startElement("", "", "LATITUDE", atts);
th.characters(elements[2].toCharArray(), 0, elements[2].length());
th.endElement("", "", "LATITUDE");
th.startElement("", "", "LONGITUDE", atts);
th.characters(elements[3].toCharArray(), 0, elements[3].length());
th.endElement("", "", "LONGITUDE");
}
public void closeXML() throws SAXException {
th.endElement("", "", "AIS-SENSOR");
th.endElement("", "", "SYSTEM-TRACKS");
th.endDocument();
}
}
但是当我执行它时,我得到以下错误
java.lang.ArrayIndexOutOfBoundsException: 1
at ToXML.process(ToXML.java:76)
at ToXML.doit(ToXML.java:38)
at ToXML.main(ToXML.java:26)
谁能帮我制作一个正确的 XML 文件,如上所示??
提前致谢
【问题讨论】:
-
ArrayIndexOutOfBoundsException:抛出该异常以指示使用非法索引访问了数组。索引为负数或大于或等于数组的大小。 docs.oracle.com/javase/1.4.2/docs/api/java/lang/…
-
为什么不使用调试器自己缩小问题范围呢? (如果你不知道怎么做,我非常建议你学习它,因为它肯定比在这里提问要快)
-
看看第 76 行,它是如何访问超出其大小的数组位置的? (这是非常基本的,突出显示第 76 行不会对您造成伤害,因为我当然不会将您的代码加载到编辑器中自己弄清楚)
-
我希望您正在加载一个空白行,因此拆分不会是您期望的数组。
-
那么您从这些建议中发现了什么?有什么解决办法吗?