2024年3月5日发(作者:)
xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)
第二种:DOM解析
DOM中的核心概念就是节点。DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。在内存中,这些节点形成一课文档树。整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。
PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点
Java代码
import nt;
import odeMap;
import ;
import ser;
public class DOMPrinter
{
public static void main(String[] args)
{
try
{
/** *//** 获取Document对象 */
DOMParser parser = new DOMParser();
("");
Document document = ument();
printNode(document);
} catch (Exception e)
{
tackTrace();
}
}
public static void printNode(Node node)
{
short nodeType=eType();
switch(nodeType)
{
case SING_INSTRUCTION_NODE://预处理指令类型
printNodeInfo(node);
break;
case T_NODE://元素节点类型
printNodeInfo(node);
printAttribute(node);
break;
case _NODE://文本节点类型
printNodeInfo(node);
break;
default:
break;
}
Node child=stChild();
while(child!=null)
{
printNode(child);
child=tSibling();
}
}
/** *//**
* 根据节点类型打印节点
* @param node
*/
public static void printNodeInfo(Node node)
{
if (eType() == T_NODE)
{
n("NodeName: " + eName());
}
else if (eType() == _NODE)
{
String value = eValue().trim();
if (!(""))
n("NodeValue: " + value);
else
n();
}else
{
n(eName()+" : "+eValue());
}
}
/** *//**
* 打印节点属性
* @param aNode 节点
*/
public static void printAttribute(Node aNode)
{
NamedNodeMap attrs = ributes();
if(attrs!=null)
{
for (int i = 0; i < gth(); i++)
{
Node attNode = (i);
n("Attribute: " + eName() + "="" + eValue()+""");
}
}
}
DOM生成XML文档:
Java代码
import tFoundException;
import tputStream;
import ption;
import ntBuilder;
import ntBuilderFactory;
import ConfigurationException;
import nt;
import t;
import ializer;
public class DOMCreateExample
{
public static void main(String[] args) throws ParserConfigurationException
{
//DOMImplementation domImp = Implementation();
DocumentBuilderFactory builderFact = tance();
DocumentBuilder builder = umentBuilder();
Document doc = ument();
//Document doc = Document(null, null, null);
Element root = Element("games");
Element child1 = Element("game");
Child(TextNode("Final Fantasy VII"));
ribute("genre", "rpg");
Child(child1);
Child(root);
XMLSerializer serial;
try
{
serial = new XMLSerializer(new FileOutputStream(""), null);
ize(doc);
} catch (FileNotFoundException e1)
{
tackTrace();
} catch (IOException e)
{
tackTrace();
}
}
}
第三种JDOM解析
JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM简单易用。JDOM也使用对象树来表示XML文档,JDOM使用SAXj解析器来分析XML文档,构建JDOM树。然而JOMD本身并没有提供解析器,它使用其他开发商提供的标准SAX解析器,JDOM默认通过JAXP来选择解析器,可以通过手动知道解析器的类名来设置。
首先要在工程中添加jdom的jar包,这里使用。(见附件)
Java代码
import ;
import nt;
import t;
import lder;
import ;
import putter;
public class JDOMConvert
{
public static void main(String[] args)
{
SAXBuilder saxBuilder=new SAXBuilder();
try
{
Document doc=(new File(""));
//首先创建好节点
Element eltDb=new Element("db");
Element eltDriver=new Element("driver");
Element eltUrl=new Element("url");
Element eltUser=new Element("user");
Element eltPassword=new Element("password");
//设置节点的值
t("");
t("jdbc:mysql://localhost/mySql");
t("root");
t("xlc");
//添加到根节点
tent(eltDriver);
tent(eltUrl);
tent(eltUser);
tent(eltPassword);
//根节点设置属性
ribute("type","mysql");
Element root=tElement();
//Child("db");//删除节点
tent(eltDb);//增加节点
//修改db节点中内容
ld("db").getChild("user").setText("system");
ld("db").getChild("password").setText("manager");
XMLOutputter xmlOut=new XMLOutputter();
//设置XML格式
Format fmt=ttyFormat();
ent(" ");
oding("utf-8");
mat(fmt);
(doc,);
}
catch (Exception e)
{
tackTrace();
}
}
}
JDOM生成XML文档:
Java代码
import ption;
import nt;
import t;
import putter;
public class JDOMCreate
{
public static void main(String[] args)
{
Document doc = new Document(new Element("games"));
Element newGame = new Element("game").setText("Final Fantasy VI");
tElement().addContent(newGame);
ribute("genre", "rpg");
XMLOutputter domstream = new XMLOutputter();
try
{
(doc, );
} catch (IOException e)
{
tackTrace();
}
}
}
第四种:DOM4J解析
dom4j与JDOM一样,也是一种用于解析XML文档的开放源代码的XML框架,dom4j也应用于java平台,dom4j API使用了java集合框架并完全支持DOM、SAX和JAXP。与JDOM不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂些,但它提供了比JDOM更好的灵活性。dom4j也使用SAX解析器来分析XML文档,创建dom4j树。此外dom4j也可以接收DOM格式的内容,并提供了从dom4j树到SAX事件流或W3C DOM树的输出机制。与JDOM不同,dom4j自带了一个SAX解析器Aelfred2,如果没有显示的设置SAX解析器,也没有通过系统属性设置解析器,dom3j将会使用JAXP来加载JAXP配置的解析器,如果创建解析器失败,那么最后才使用dom4j自带的Aelfred2解析器。
同样,首先要在工程中添加dom4j的jar包,这里使用。(见附件)
Dom4j生成XML文档:
Java代码
import ption;
import nt;
import ntHelper;
import t;
import Format;
import ter;
public class Dom4jCreate
{
public static void main(String[] args)
{
Document doc = Document();
cessingInstruction("xml-stylesheet", "type='text/xsl' href=''");
Type("dbconfig", null,"");
//Element root=Element("dbconfig");
// tElement(root);
Element root = ment("dbconfig");
Element eltDb= ment("db");
Element eltDriver = ment("driver");
Element eltUrl = ment("url");
Element eltUser = ment("user");
Element eltPassword = ment("password");
t("");
t("jdbc:mysql://localhost/mySql");
t("root");
t("xlc");
ribute("type","mysql");
try
{
//设置输出格式
OutputFormat outFmt = new OutputFormat(" ", true);
oding("UTF-8");
/**//*PrintWriter pw = new PrintWriter();
(pw);
();
();*/
XMLWriter xmlWriter = new XMLWriter(, outFmt);
// XMLWriter xmlWriter=new XMLWriter(new FileWriter(""),outFmt);
(doc);
();
();
} catch (IOException e)
{
tackTrace();
}
}
}
Dom4j修改XML文档:
Java代码
import ;
import iter;
import or;
import ;
import nt;
import t;
import Format;
import der;
import ter;
public class Dom4jModify
{
public Document modifyDocument(File inputXml)
{
try
{
SAXReader saxReader = new SAXReader();
Document document = (inputXml);
Type("dbconfig",null,"");
List list = t();
// Iterator iter = erator();
Iterator iter = or();
Element element = (Element) ();
t("db").attribute("type").setValue("mysql");
t("db").element("url").setText("jdbc:mysql://localhost/mySql");
t("db").element("driver").setText("");
t("db").element("user").setText("root");
t("db").element("password").setText("xlc");
// 设置输出格式
OutputFormat outFmt = new OutputFormat(" ", true);
oding("UTF-8");
XMLWriter xmlWriter=new XMLWriter(new FileWriter(""),outFmt);
(document);
();
();
return document;
}
catch (Exception e)
{
n(sage());
return null;
}
}
public static void main(String[] args) throws Exception
{
Dom4jModify dom4jParser = new Dom4jModify();
Document document = Document(new File(""));
OutputFormat outFmt = new OutputFormat(" ", true);
oding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(,outFmt);
(document);
();
();
}
}


发布评论