XML解析大全Word文档下载推荐.docx
- 文档编号:7980957
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:18
- 大小:751.98KB
XML解析大全Word文档下载推荐.docx
《XML解析大全Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《XML解析大全Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
Documentdoc=builder.newDocument();
//设置节点
Elementpersons=doc.createElement("
persons"
);
Elementperson=doc.createElement("
person"
Elementname=doc.createElement("
name"
//设置节点内容
name.appendChild(doc.createTextNode("
zheng"
));
//设置各节点关系
person.appendChild(name);
persons.appendChild(person);
doc.appendChild(persons);
TransformerFactoryft=TransformerFactory.newInstance();
Transformert=ft.newTransformer();
//处理中文
t.setOutputProperty(OutputKeys.ENCODING,"
GBK"
//准备输出文档
DOMSourcesource=newDOMSource(doc);
StreamResultresult=newStreamResult(newFile("
d:
\first.xml"
t.transform(source,result);
}
}
》》》》》》》》》》》》》DOM解析方式》》》》》》》》》》》》》》》》》
publicclassDOMDemo
{
//取得解析文件,放入内存
Documentdoc=builder.parse(newfile("
//得到所有person节点
NodeListperson=doc.getElementsByTagName("
//如果只有一个name标记时,可以System.out.println("
name:
"
+nl.item(0).getFirstChild().getNodeValue());
//输出节点
for(inti=0;
i<
person.getlength();
i++){
Elemente=(Element)person.item(i);
//取出每一个元素
System.out.println("
+e.getElementsByTagName("
).item(0).getFristChild().getNodevalue());
}
//////////////////first.xml////////////////////
<
persons>
<
person>
<
name>
zheng<
/name>
/person>
aaa<
/persons>
JDK自带的文档解析器:
documentBuilder由抽象类documentBuilderFactory产生的,
如果类是抽象类,可以通过他的工厂模式来获得他的实例即通过抽象类的静态方法获得的
如:
toolKit(让视图居中显示)
child.getNodeType()的值:
1,是元素节点2,是节点属性3,是文本节点
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
try{
DocumentBuilderdb=dbf.newDocumentBuilder();
Documentdoc=db.parse(newFile("
persons.xml"
Noderoot=doc.getDocumentElement();
//System.out.println(root.getNodeName());
see(root);
//System.out.println(num);
}catch(ParserConfigurationExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SAXExceptione){
}catch(IOExceptione){
privatestaticvoidsee(Nodenode){
if(node.getNodeType()==1){
NamedNodeMapnnm=node.getAttributes();
if(nnm!
=null){
NodeattrNode=nnm.getNamedItem("
id"
if(attrNode!
if(Integer.parseInt(attrNode.getNodeValue())==2){
for(Nodechild=node.getFirstChild();
child!
=null;
child=child.getNextSibling()){
if(child.getNodeType()==1){
System.out.println(child.getFirstChild().getNodeValue());
}
}
}
}}
for(Nodetemp=node.getFirstChild();
temp!
temp=temp.getNextSibling()){
see(temp);
SAX和DOM解析的区别:
SAX适合文档的读取,本身不能修改,不受文件大小限制
DOM可以对文档修改,但是占用内存,文件过大则不能使用
在w3c本身提供的XML操作标准:
DOM和SAX,但是从开发角度上看,DOM和SAX本身都各有特点
所谓的JDOM=DOM的可修改性+SAX的可读性,JDOM下载地址www.jdom.org
如果是在web中使用,则可以把jdom.jar的包,拷贝到tomcat目录D:
\ProgramFiles\apache-tomcat-5.5.28\server\lib或者D:
\ProgramFiles\apache-tomcat-6.0.32\lib下即可
如果是用户自己直接使用则可以把jdom.jar路径拷贝到classpath中,或者拷贝到工程目录下
JDOM对XML的解析
SAX解析XML过程
节点式解析也是事件解析方式与dom解析相似JDK自带的解析方式
SAXParserFactoryspf=SAXParserFactory.newInstance();
Filefile=newFile("
SAXParsersap=spf.newSAXParser();
sap.parse(file,newDefaultHandler(){
privatebooleanisTwo=false;
privatebooleanisName=false;
//文本节点事件
@Override
publicvoidcharacters(char[]ch,
intstart,
intlength)
throwsSAXException{
if(isTwo&
&
isName){
System.out.println(newString(ch,start,length));
isTwo=false;
isName=false;
}
//开始标记事件
publicvoidstartElement(Stringuri,
StringlocalName,
StringqName,
Attributesattributes)
//System.out.println(qName);
if(qName.equals("
)){
Stringid=attributes.getValue("
if(id.equals("
2"
isTwo=true;
}}
if(isTwo){
if(qName.equals("
isName=true;
}}}});
}catch(Exceptione){
JDOM生成XML文件:
importorg.jdom.*;
importorg.jdom.output.*;
publicclassWriterXMl{
publicstaticvoidmain(String[]args)throwException{
//创建元素
Elementpersons=newElement("
);
Elementperson=newElement("
Elementname=newElement("
//创建属性
Attributeid=newAttribute("
"
1"
//创建Document树节点
Documentdoc=newDocument(persons);
//把属性设置到person元素中
person.setAttribute(id);
//设置元素的内容
name.setText("
andy"
//设置关系
person.addContent(name);
persons.addContent(person);
//输出XML文件
XMLOutputterout=newXMLOutputter();
//设置编码,默认编码是utf-8
out.setFormat(out.getFormat().setEncoding("
out.output(doc,newFileOutputStream(newFile("
+File.separator+"
)));
JDOM解析XML文件:
importjava.util.*;
importorg.jdom.input.*;
publicclassReaderXMl{
//创建解析器
SAXBuilderbuilder=newSAXBuilder();
Documentread_doc=builder.build(newFile("
D:
//取得persons根节点
Elementroot=read_doc.getRootElement();
Listlist=root.getChildren("
for(inti=0;
list.size();
i++){
//获取person元素
Elemente=(Element)list.get(i);
//获取person元素的id属性的值
stingid=e.getAttribute("
).getValue();
//获取元素的子元素文本内容
stringname=e.getChildText("
DOM4J讲解:
DOM4J下载地址:
把dom4j配置到classpath中
DOM4J生成XML文件:
importorg.dom4j.*;
importorg.dom4j.io.*;
publicclassDOM4JWriterXMlthrowsException{
//创建文档
Documentdoc=DocumentHelper.createDocument();
//创建节点
Elementpersons=doc.addElement("
Elementperson=doc.addElement("
Elementname=doc.addElement("
//给节点赋值
//xml的格式化输出
OutputFormatformat=OutputFormat.createPrettyPrint();
//设置编码
format.setEncoding("
XMLWriterwriter=newXMLWriter(newFileOutpuStream(newFile("
)),format);
writer.write(doc);
writer.close();
}}
DOM4J解析XML文件:
publicclassDOM4JReaderXMlthrowsException{
Filefile=newFile("
SAXReaderreader=newSAXReader();
//读取文件
Documentdoc=reader.read(file);
//JDOM操作的时候要取得根节点
Elementroot=doc.getRootElement();
//根据根节点找到所有子节点,person
Iteratoriter=root.elementIterator();
while(iter.hasNext()){
Elementperson=(Element)iter.next();
姓名:
+person.elementText("
}}}
》》》》》》》》》》》》》》》》》》解析XML流》》》》》》》》》》》》
InputStreamis=request.getInputStream();
Documentdoc=reader.read(is);
Iterator<
Element>
ite=root.elementIterator("
city"
while(ite.hasNext()){
Elemente=ite.next();
System.out.println(e.getData());
}
}catch(DocumentExceptione){
》》》》》》》》》》》》》》》》》》》citys.xml》》》》》》》》》》》》》》》》》》》》》》》》
citys>
city>
sjdflsk<
/city>
sdfdc<
/citys>
PULL解析xml:
我们使用SAX方式解析xml文档,SAX方式是基于事件驱动的。
当然android的事件机制是基于回调函数的。
在这一节中,我们用另外一种方式解析xml文档,这种方式也是基于事件驱动的,与SAX方式一样,它就是PULL方式。
只不过PULL方式读xml回调方法返回的是数字。
读取到xml的声明返回
START_DOCUMENT;
读取到xml的结束返回
END_DOCUMENT;
读取到xml的开始标签返回START_TAG
读取到xml的结束标签返回END_TAG
读取到xml的文本返回
TEXT
xml数据结果还是采用我们先前使用的river.xml文件。
采用PULL方式与SAX大同小异,重点在于我们需要知道导航到什么标签时候做什么就行了,依据上一节SAX处理方式的思路,我们也可以在这一节中一样处理,基本方法是:
基本处理方式是:
当PULL解析器导航到文档开始标签时就开始实例化list集合用来存贮数据对象。
导航到元素开始标签时回判断元素标签类型,如果是river标签,则需要实例化River对象了,如果是其他类型,则取得该标签内容并赋予River对象。
当然它也会导航到文本标签,不过在这里,我们可以不用。
根据以上的解释,我们可以得出以下处理xml文档逻辑:
1:
当导航到XmlPullParser.START_DOCUMENT,可以不做处理,当然你可以实例化集合对象等等。
2:
当导航到XmlPullParser.START_TAG,则判断是否是river标签,如果是,则实例化river对象,并调用getAttributeValue方法获取标签中属性值。
3:
当导航到其他标签,比如Introduction时候,则判断river对象是否为空,如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XML 解析 大全