51,407
社区成员
发帖
与我相关
我的任务
分享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)