java 读取xml和写入xml,写入xml时候XMLWriter.write报String index out of range: 0

zzk171 2015-01-14 01:26:25
package tools;

import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;
import org.dom4j.io.OutputFormat;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.DocumentException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Iterator;
import java.util.Map;
import java.io.*;

public class DetalXML {

public Document readXML(String fileName) {

SAXReader saxReader = new SAXReader();
Document doc = null;
try {
doc = saxReader.read(new File(fileName));
} catch (DocumentException e) {
e.printStackTrace();
}
return doc;
}

public void XPATH(String fileName) {
try {

Document doc = readXML(fileName);

Node node = doc.selectSingleNode("/Workbook");
Map<String, String> nsMap = new HashMap<String, String>();
nsMap.put("Workbook",
"urn:schemas-microsoft-com:office:spreadsheet");
XPath xpath = doc.createXPath("Workbook:Worksheet");

xpath.setNamespaceURIs(nsMap);
List<Element> list = xpath.selectNodes(node);
System.out.println("找到<Worksheet></Worksheet>节点数:" + list.size());

Element element = (Element) list.get(0);
System.out.println(element.attributeValue("Name"));

// XPath x = doc.createXPath("//Workbook:Data");
// x.setNamespaceURIs(nsMap);
// Element valueElement = (Element)x.selectSingleNode(doc);
// System.out.println(valueElement.getText());
XPath x = doc.createXPath("//Workbook:Cell");
x.setNamespaceURIs(nsMap);
list = x.selectNodes(doc);
System.out.println("找到Cell节点数:" + list.size());
// 打印找到的每个目标节点的内容
for (Element element2 : list) {

//System.out.println(element2.asXML());
}
Element element2 = (Element) list.get(0);
Element elm =addElement(element2,"aaa","ss:Type","String", "mm2");
System.out.println("找到节点数:" + elm.getText());
Element elm1 =addElement(elm,"bbb","ss:Type","String", "vvv665");
element2.addElement("bell");
elm.addAttribute("ss:Type", "String");
elm.setText("");

// x = doc.createXPath("//Workbook:Table");
// x.setNamespaceURIs(nsMap);
// list = x.selectNodes(doc);
// System.out.println("找到Table节点数:" + list.size());
//
// Element elementTable = (Element) list.get(0);
// System.out.println("找到Table:" + elementTable.getName());
// List<String> data=new ArrayList();
// data.add("1");
// data.add("2");
// data.add("3");
// data.add("4");
// data.add("5");
// data.add("6");
// data.add("7");
// data.add("8");
// System.out.println("找到data:" +data.size());
// //addRow(elementTable,8, "s70", data);
// Element rowElement;
// Element cellElement;
// Element dataElement;
// rowElement =addElement(elementTable,"Row","ss:AutoFitHeight","0", "");
//
// cellElement=addElement(rowElement,"Cell", "ss:StyleID", "s70","");
// dataElement=addElement(cellElement,"Data", "ss:Type","String","2255");
//
//
//
/** 将document中的内容写入文件中 */
OutputFormat format = OutputFormat.createPrettyPrint();
//创建文件输出的时候,自动缩进的格式
format.setEncoding("UTF-8");//设置编码
XMLWriter writer = new XMLWriter(new FileOutputStream(fileName),format);
writer.write(doc);
writer.close();
} catch (Exception ex) {
ex.printStackTrace();
}

}
public static Element addElement(Element parentElement,String childElement,String attName,String attValues,String text){

Element elm = parentElement.addElement(childElement);
elm.addAttribute(attName, attValues);
elm.setText(text);
return elm;

}
public static void addRow(Element parentElement,int cellNum,String cellAtt,List<String> data){

Element rowElement;
Element cellElement;
Element dataElement;

rowElement =addElement(parentElement,"Row","ss:AutoFitHeight","0", "");
for(int i=0;i<cellNum;i++){
cellElement=addElement(rowElement,"Cell", "ss:StyleID", cellAtt,"");
dataElement=addElement(cellElement,"Data", "ss:Type","String",data.get(i));
}


}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DetalXML xml = new DetalXML();
// getNode("9.xls");
//ReadNode("2.xls");

xml.XPATH("4.xls");
}

}

<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="199" ss:ExpandedRowCount="9" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="80.25" ss:DefaultRowHeight="13.5">
<Row ss:Height="18">
<Cell ss:StyleID="s14" ss:MergeAcross="6">
<Data ss:Type="String">存款大额变化情况表(自营存款)</Data>
</Cell>
</Row>
<Row>
<Cell ss:StyleID="s9"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
<Cell ss:StyleID="s10"/>
</Row>
<Row>
<Cell ss:StyleID="s11">
<Data ss:Type="String">客户名称</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">客户代码</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">机构名称</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">机构代码</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">存款类型(自营存款)</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">币种</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">变动额(元)</Data>
</Cell>
<Cell ss:StyleID="s12">
<Data ss:Type="String">统计日期</Data>
</Cell>
</Row>
<Row>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13">
<Data ss:Type="String">1</Data>
</Cell>
<Cell ss:StyleID="s13">
<Data ss:Type="String">CNY</Data>
</Cell>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
</Row>
<Row>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13">
<Data ss:Type="String">1</Data>
</Cell>
<Cell ss:StyleID="s13">
<Data ss:Type="String">CNY</Data>
</Cell>
<Cell ss:StyleID="s13"/>
<Cell ss:StyleID="s13"/>
</Row>

</Table>
</Worksheet>
</Workbook>

找到<Worksheet></Worksheet>节点数:3
Sheet1
找到Cell节点数:65
找到节点数:mm2
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1098)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1086)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1086)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1086)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1086)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.writeElementContent(XMLWriter.java:1086)
at org.dom4j.io.XMLWriter.writeElement(XMLWriter.java:954)
at org.dom4j.io.XMLWriter.writeNode(XMLWriter.java:1301)
at org.dom4j.io.XMLWriter.write(XMLWriter.java:344)
at tools.DetalXML.XPATH(DetalXML.java:228)
at tools.DetalXML.main(DetalXML.java:347)

...全文
387 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CodeMaker_12138 2015-04-29
  • 打赏
  • 举报
回复
你好,我现在也遇到了这个问题,请问你已经解决了吗?万分感谢。
zzk171 2015-01-14
  • 打赏
  • 举报
回复
但是提示我是写入文件时候越界,,
weinianjie1 2015-01-14
  • 打赏
  • 举报
回复
at java.lang.String.charAt(String.java:658) 很明显,你字符串调用charAt的时候下标越界了

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧