如何用JDOM解析office生成的xml文件
<?xmlversion="1.0"?><?mso-applicationprogid="Excel.Sheet"?><Workbookxmlns="urn:schema...
<?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>Arthur </Author>
<LastAuthor>Arthur </LastAuthor>
<Revision>2 </Revision>
<TotalTime>1 </TotalTime>
<Created>2008-03-16T01:55:00Z </Created>
<LastSaved>2008-03-16T01:55:00Z </LastSaved>
<Company>sdau </Company>
<Version>12.00 </Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>5250 </WindowHeight>
<WindowWidth>8415 </WindowWidth>
<WindowTopX>240 </WindowTopX>
<WindowTopY>120 </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="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s65">
<Alignment ss:Horizontal="Justify" ss:Vertical="Center" ss:WrapText="1"/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="16" ss:Color="#000000"
ss:Bold="1" ss:Italic="1"/>
</Style>
</Styles>
<Worksheet ss:Name="a.">
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0" ss:Height="20.25">
<Cell ss:MergeAcross="6" ss:StyleID="s65"> <Data ss:Type="String">宋体三号加粗倾斜 </Data> </Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>0 </PaperSizeIndex>
<VerticalResolution>0 </VerticalResolution>
<NumberofCopies>0 </NumberofCopies>
</Print>
<Selected/>
<DoNotDisplayGridlines/>
<Panes>
<Pane>
<Number>3 </Number>
<RangeSelection>R1C1:R1C7 </RangeSelection>
</Pane>
</Panes>
<ProtectObjects>False </ProtectObjects>
<ProtectScenarios>False </ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
上边是一个由word文件转换出来的xml文件,现在我想遍历Style样式名,找到对应StyleID的文本内容,文本格式等信息,如StyleID="s65",我就应该能得到文本内容是“宋体三号加粗倾斜”,FontName为宋体等等。希望可以用JDOM实现,望达人门指教 展开
<?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>Arthur </Author>
<LastAuthor>Arthur </LastAuthor>
<Revision>2 </Revision>
<TotalTime>1 </TotalTime>
<Created>2008-03-16T01:55:00Z </Created>
<LastSaved>2008-03-16T01:55:00Z </LastSaved>
<Company>sdau </Company>
<Version>12.00 </Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>5250 </WindowHeight>
<WindowWidth>8415 </WindowWidth>
<WindowTopX>240 </WindowTopX>
<WindowTopY>120 </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="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s65">
<Alignment ss:Horizontal="Justify" ss:Vertical="Center" ss:WrapText="1"/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="16" ss:Color="#000000"
ss:Bold="1" ss:Italic="1"/>
</Style>
</Styles>
<Worksheet ss:Name="a.">
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0" ss:Height="20.25">
<Cell ss:MergeAcross="6" ss:StyleID="s65"> <Data ss:Type="String">宋体三号加粗倾斜 </Data> </Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>0 </PaperSizeIndex>
<VerticalResolution>0 </VerticalResolution>
<NumberofCopies>0 </NumberofCopies>
</Print>
<Selected/>
<DoNotDisplayGridlines/>
<Panes>
<Pane>
<Number>3 </Number>
<RangeSelection>R1C1:R1C7 </RangeSelection>
</Pane>
</Panes>
<ProtectObjects>False </ProtectObjects>
<ProtectScenarios>False </ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
上边是一个由word文件转换出来的xml文件,现在我想遍历Style样式名,找到对应StyleID的文本内容,文本格式等信息,如StyleID="s65",我就应该能得到文本内容是“宋体三号加粗倾斜”,FontName为宋体等等。希望可以用JDOM实现,望达人门指教 展开
5个回答
展开全部
JDOM据我了解没有dom4J好用。。我解析xml都是用的dom4J的。。里面的方法都很好用。如果知道xml文件是固定的格式直接去迭代访问节点属性就好了。。
用dom4j,解释后是个树状结构,循环遍历里面的Element。
看dom4j的API帮助,下载官方包,里面有用法示例。
用dom4j,解释后是个树状结构,循环遍历里面的Element。
看dom4j的API帮助,下载官方包,里面有用法示例。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package com;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class JdomTestReader {
public static void main(String[] args) {
JdomReader jr = new JdomReader();
try {
jr.readIn(new File("d:\\Test.xml"));
jr.showThisDocument("s65");
}catch (Exception e) {
e.printStackTrace();
}
}
}
class JdomReader {
private SAXBuilder sbuild;
private Document doc_in;
public JdomReader(){
sbuild = new SAXBuilder();
}
public void readIn(File file) throws JDOMException, IOException{
if(file==null) throw new JDOMException("请确保传入文件引用不是null.");
doc_in = sbuild.build(file);
}
public void showThisDocument(String sid) throws Exception{
this.checkDom();
Element root = doc_in.getRootElement();
List child1 = root.getChildren();
for(int i=0;i<child1.size();i++)
{
Element styles = (Element) child1.get(i);
if(styles.getName().equals("Styles"))
{
List styleChild = styles.getChildren();
for(int j=0;j<styleChild.size();j++)
{
Element style = (Element) styleChild.get(j);
if(style.getName().equals("Style"))
{
Namespace ss = Namespace.getNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
Attribute att = style.getAttribute("ID", ss);
if(att.getValue().equals(sid))
{
List style_chile = style.getChildren();
for(int k=0;k<style_chile.size();k++)
{
Element font = (Element) style_chile.get(k);
if(font.getName().equals("Font"))
{
List att_all = font.getAttributes();
for(int m=0;m<att_all.size();m++)
{
Attribute attr = (Attribute) att_all.get(m);
System.out.println(attr.getName() + ":" + attr.getValue());
}
}
}
}
}
}
}
}
}
private void checkDom() throws Exception{
if(doc_in == null) throw new Exception("请先读取你要操作的文件.");
}
}
需要jdom.jar包
在我这里运行可以取出你需要的属性了.
不过个人感觉还是dom4j更好用一些.
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class JdomTestReader {
public static void main(String[] args) {
JdomReader jr = new JdomReader();
try {
jr.readIn(new File("d:\\Test.xml"));
jr.showThisDocument("s65");
}catch (Exception e) {
e.printStackTrace();
}
}
}
class JdomReader {
private SAXBuilder sbuild;
private Document doc_in;
public JdomReader(){
sbuild = new SAXBuilder();
}
public void readIn(File file) throws JDOMException, IOException{
if(file==null) throw new JDOMException("请确保传入文件引用不是null.");
doc_in = sbuild.build(file);
}
public void showThisDocument(String sid) throws Exception{
this.checkDom();
Element root = doc_in.getRootElement();
List child1 = root.getChildren();
for(int i=0;i<child1.size();i++)
{
Element styles = (Element) child1.get(i);
if(styles.getName().equals("Styles"))
{
List styleChild = styles.getChildren();
for(int j=0;j<styleChild.size();j++)
{
Element style = (Element) styleChild.get(j);
if(style.getName().equals("Style"))
{
Namespace ss = Namespace.getNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
Attribute att = style.getAttribute("ID", ss);
if(att.getValue().equals(sid))
{
List style_chile = style.getChildren();
for(int k=0;k<style_chile.size();k++)
{
Element font = (Element) style_chile.get(k);
if(font.getName().equals("Font"))
{
List att_all = font.getAttributes();
for(int m=0;m<att_all.size();m++)
{
Attribute attr = (Attribute) att_all.get(m);
System.out.println(attr.getName() + ":" + attr.getValue());
}
}
}
}
}
}
}
}
}
private void checkDom() throws Exception{
if(doc_in == null) throw new Exception("请先读取你要操作的文件.");
}
}
需要jdom.jar包
在我这里运行可以取出你需要的属性了.
不过个人感觉还是dom4j更好用一些.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
JDOM据我了解没有dom4J好用。。我解析xml都是用的dom4J的。。里面的方法都很好用。如果知道xml文件是固定的格式直接去迭代访问节点属性就好了。。
一直就很笨 你很幽默。。
一直就很笨 你很幽默。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用dom4j。解释后是个树状结构,循环遍历里面的Element。
看dom4j的API帮助,下载官方包,里面有用法示例。
看dom4j的API帮助,下载官方包,里面有用法示例。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BS楼上的回答者:兲遥!!
强烈BS!!!!!
人不能无耻到这个地步,可是你做到了!
强烈BS!!!!!
人不能无耻到这个地步,可是你做到了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询