使用dom4j能读取excel生成的xml文件吗?

zhrubin 2013-06-22 04:50:59
excel可以将文件到处为xml,看了一下应该就是标准的xml文件
按理说应该可以读取啊,可是自己变了些测试代码,总是无法读取成功不知道是怎么回事
String fileName = "e:\\temp\\test.xml";
String nodeName ="/Workbook/Worksheet";//获得Worksheet元素

Document document = new SAXReader().read(new File(fileName));
System.out.println("document name="+document.getName());
List nodes = document.selectNodes(nodeName);
System.out.println("nodes size="+nodes.size());
System.out.println("nodes[0]="+nodes.get(0));


但用自己的xml文件却没有问题,自己编写的xml文件如下
把上面代码中的
String fileName = "e:\\temp\\test.xml";
String nodeName ="/Workbook/Worksheet";
改成
String fileName = "e:\\temp\\classes.xml";
String nodeName ="/classes/student";

<?xml version="1.0" encoding="UTF-8"?>

<classes name="网络">
<student name="张三">
张三是个好学生
</student>
<student name="李四">
李四也是个好学生
</student>

</classes>

...全文
260 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
火影之贺 2013-06-25
  • 打赏
  • 举报
回复
String xpath = "/Workbook/Worksheet/Table/Row/Cell"; 用这个试试瞧!
zhrubin 2013-06-23
  • 打赏
  • 举报
回复
测试文件源代码
package testXML;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class TestXML {
	public static void main(String[] args) throws Exception {
//		String fileName = "Book1.xml";//excel另存为xml表格
		String fileName = "classes.xml";//自己建立的一个xml
//		String xpath = "/Workbook/Worksheet";//针对Book1.xml表格的xpath
		String xpath = "/classes/student";//针对自建classes.xml的xpath
		
		InputStream resourceAsStream = TestXML.class.getResourceAsStream(fileName);
		Document document = new SAXReader().read(resourceAsStream);
		Element rootElement = document.getRootElement();
		System.out.println(rootElement.getName());
		Iterator iterator = rootElement.elementIterator();
		while (iterator.hasNext()) {
			Element  element  = (Element ) iterator.next();
			System.out.println(element.getName());
		}
		List<Node> nodes = document.selectNodes(xpath);
		System.out.println("length="+nodes.size());
		for (Node node : nodes) {
			System.out.println(node.asXML());
		}
	}
}
如果是对自建的classes.xml使用xpath进行解析,得到如下结果: classes student student length=2 <student name="张三" age="10"> 张三是个好学生 </student> <student name="李四" age="20"> 李四也是个好学生 </student> 如果是对excel另存为xml表格(Book1.xml)的文件使用xpath进行解析,结果是这样: Workbook DocumentProperties ExcelWorkbook Styles Worksheet Worksheet Worksheet length=0 其中Worksheet是excel生成的xml表格里面有的element,明明能看得到,但是就是试图通过xpath获取其节点的时候,就是获取不到 自建的classes.xml代码如下
<?xml version="1.0" encoding="UTF-8"?>

<classes name="网络">
	<student name="张三" age="10">
		张三是个好学生
	</student>
	<student name="李四" age="20">
		李四也是个好学生
	</student>

</classes>
excel导出的Book1.xml文件如下
<?xml version="1.0"?>
<?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">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>ruhai</Author>
  <LastAuthor>ruhai</LastAuthor>
  <Created>2013-06-23T00:32:17Z</Created>
  <Version>11.9999</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>8280</WindowHeight>
  <WindowWidth>18315</WindowWidth>
  <WindowTopX>360</WindowTopX>
  <WindowTopY>60</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Center"/>
   <Borders/>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s22">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="classes">
  <Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="5" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
   <Column ss:Index="4" ss:AutoFitWidth="0" ss:Width="75"/>
   <Row>
    <Cell ss:MergeAcross="3" ss:StyleID="s22"><Data ss:Type="String">班级表</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">序号</Data></Cell>
    <Cell><Data ss:Type="String">name</Data></Cell>
    <Cell><Data ss:Type="String">年龄</Data></Cell>
    <Cell><Data ss:Type="String">desc</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">1</Data></Cell>
    <Cell><Data ss:Type="String">张三</Data></Cell>
    <Cell><Data ss:Type="Number">10</Data></Cell>
    <Cell><Data ss:Type="String">张三很好</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">2</Data></Cell>
    <Cell><Data ss:Type="String">李四</Data></Cell>
    <Cell><Data ss:Type="Number">20</Data></Cell>
    <Cell><Data ss:Type="String">李四也不错</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">3</Data></Cell>
    <Cell><Data ss:Type="String">王五</Data></Cell>
    <Cell><Data ss:Type="Number">34</Data></Cell>
    <Cell><Data ss:Type="String">王五年纪大了</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>10</ActiveRow>
     <ActiveCol>1</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet2">
  <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet3">
  <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>
zhrubin 2013-06-22
  • 打赏
  • 举报
回复
引用 2 楼 u010255083 的回复:
excel导出的xml是啥样子的?贴出来瞧瞧? 你说的读取不成功,是报错了还是怎么回事?
在excel中另存为,然后选择格式。 回去就把代码发上来
火影之贺 2013-06-22
  • 打赏
  • 举报
回复
excel导出的xml是啥样子的?贴出来瞧瞧? 你说的读取不成功,是报错了还是怎么回事?
lcf 2013-06-22
  • 打赏
  • 举报
回复
按理说是一样的,你贴一段excel生成的上来看看

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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