
import javaioFile;
import javautilList;
import orgdom4jDocument;
import orgdom4jDocumentException;
import orgdom4jElement;
import orgdom4jioSAXReader; public class XmlDocument{
//文件对象
private static File xmlf;
//SAX对象
private SAXReader reader;
//Document对象
private Document doc;
/
构造函数 实例化文件,SAX跟Document对象
@param f 指定文件路径
/
public XmlDocument(String f) {
thisxmlf = new File(f);
reader = new SAXReader();
try {
doc = readerread(xmlf);
} catch (DocumentException e) {
Systemoutprintln(egetMessage());
}
}
/
根据表名,列名 属性名 得到某一个值
@param tabName 表名
@param colName 列名
@param valName 属性名
@return returns 返回的属性值 String类型
@author JinQiao
/
public String getTableColsVal(String tabName,String colName,String valName){
String returns="";//存返回值用的,
//得到根节点
Element e_plan = (Element)docselectSingleNode("node");
//根据传来的表名跟列名 拼接节点路径 找到对应的节点
List<Element> eplist = (List<Element>) e_planselectNodes("table[@name='"+tabNametoUpperCase()+"']/column[@name='"+colNametoUpperCase()+"']/column_type");
//循环得到的节点的所有子节点
for (Element ep : eplist) {
//根据传来的属性名称 找到该属性
try{
Element id = (Element) epselectSingleNode(valName);
//得到该属性的值
returns = idgetText();
//如果未找到会报空指针异常 返回""值
}catch(NullPointerException e){
return "";
}
}
//返回
return returns;
}
/
根据表名判断此表在XML是否存在
@param tabName 表名
@return Boolean
@author JinQiao
@date 2010/07/27
/
public Boolean isNull(String tabName){
//得到根节点
Element e_plan = (Element)docselectSingleNode("node");
//根据传来的表名跟列名 拼接节点路径 找到对应的节点
List<Element> eplist = (List<Element>) e_planselectNodes("table[@name='"+tabNametoUpperCase()+"']");
//判断XML中有没有这个表, 有的话返回true 反之false,
if (eplistsize()>0)
return true;
else
return false;
} public static void main(String args []){
XmlDocument xd = new XmlDocument("C:\\Users\\JinQiao\\workspace\\ReqmanServer\\WebRoot\\WEB-INF\\src\\com\\reqman\\codemanage\\service\\tableConfigxml");
Systemoutprintln(xdgetTableColsVal("DM_YWLC", "YWLC_MC", "name"));
}} ---------------------------------------------------------------------------------------- 以下是我的XML部分截取 你试一下按你自己的要求去改类吧,<node>
<table name="DM_DZBD">
<column name="DZBD_DM">
<column_type>
<name>string</name>
</column_type>
</column>
<column name="DZBD_MC">
<column_type>
<name>string</name>
</column_type>
</column>
<column name="WJLJ_ZH">
<column_type>
<name>href</name>
<type>dzbd</type>
</column_type>
</column>
<column name="WJLJ">
<column_type>
<name>null</name>
</column_type>
</column>
<column name="BDLYLX_ID">
<column_type>
<name>radio</name>
<radio_table>DM_BDLYLX</radio_table>
<radio_col>ID,BDLYLX_MC</radio_col>
</column_type>
</column>
<column name="BDLYSM">
<column_type>
<name>strings</name>
</column_type>
</column>
<column name="YXBZ">
<column_type>
<name>radio</name>
<radio_table>DM_YN</radio_table>
<radio_col>YN_DM,YN_MC</radio_col>
</column_type>
</column>
</table></node>
仅供看考。xml也是文本文件,按照文本文件的方法读取就可以了。
以下仅供参考
package comkiddtestzhidao;import javaioBufferedReader;
import javaioFile;
import javaioFileInputStream;
import javaioIOException;
import javaioInputStreamReader;
/
Hello world!
/
public class Execute {
public static void main(String[] args) throws InterruptedException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:\\123xml"))));
String string;
while ((string = brreadLine()) != null) {
Systemoutprintln(string);
}
brclose();
}
}
JAVA与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对XML文件的读取,是我们首先要解决的问题。
一、XML文件
这个示例文件包括了用来打开ORACLE数据库的各种参数
<xml version="10" encoding="UTF-8">
<dbmsg>
<dbinfo>
<drivername>oraclejdbcdriverOracleDriver</drivername>
<sConnStr>jdbc:oracle:thin:@118822580:1521:VOUCHERDB</sConnStr>
<username>SYS AS SYSDBA</username>
<password>voucherdb</password>
</dbinfo>
</dbmsg>
二、编写类名为ReadXml的类,用于解析XML文件
我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。
package voucherbasic;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioIOException;
import javaioInputStream;
import javaxxmlparsersDocumentBuilder;
import javaxxmlparsersDocumentBuilderFactory;
import javaxxmlparsersParserConfigurationException;
import orgw3cdomDocument;
import orgw3cdomElement;
import orgw3cdomNode;
import orgw3cdomNodeList;
import orgxmlsaxSAXException;
public class ReadXml {
private String drivername;
private String sConnStr;
private String username;
private String password;
public String getDrivername() {
return drivername;
}
public String getSConnStr() {
return sConnStr;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setDrivername(String drivername) {
thisdrivername = drivername;
}
public void setSConnStr(String connStr) {
sConnStr = connStr;
}
public void setUsername(String username) {
thisusername = username;
}
public void setPassword(String password) {
thispassword = password;
}
public ReadXml(String fileName){
DocumentBuilderFactory domfac=DocumentBuilderFactorynewInstance();
try {
DocumentBuilder dombuilder=domfacnewDocumentBuilder();
InputStream is=new FileInputStream(fileName);
Document doc=dombuilderparse(is);
Element root=docgetDocumentElement();
NodeList dbinfo=rootgetChildNodes();
if(dbinfo!=null){
for(int i=0;i<dbinfogetLength();i++){
Node db=dbinfoitem(i);
for(Node node=dbgetFirstChild();node!=null;node=nodegetNextSibling()){
if(nodegetNodeType()==NodeELEMENT_NODE){
if(nodegetNodeName()equals("drivername")){
setDrivername(nodegetFirstChild()getNodeValue());
}
if(nodegetNodeName()equals("sConnStr")){
setSConnStr(nodegetFirstChild()getNodeValue());
}
if(nodegetNodeName()equals("username")){
setUsername(nodegetFirstChild()getNodeValue());
}
if(nodegetNodeName()equals("password")){
setPassword(nodegetFirstChild()getNodeValue());
}
}
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。
三、如何获取XML文件全路径并读取配置参数
获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。
1在servlet中获取XML文件的全路径并读取配置参数
程序片段String dirPath = getServletContext()getRealPath( "/WEB-INF");
String fileName = dirPath + "/connxml";
ReadXml xm = new ReadXml(fileName);
String DriverName = xmgetDrivername();
String connStr = xmgetSConnStr();
String user = xmgetUsername();
String pas = xmgetPassword();
将这段程序添加到servlet中dopost()之后即可完成参数的读取
2在单独的JAVA类中获取全路径并读取配置参数
程序片段
String dirpath = SystemgetProperty("userdir");
String xmlFile = dirpath + "/WebRoot/WEB-INF/connxml";
ReadXml rdxml = new ReadXml(xmlFile);
String driverName = rdxmlgetDrivername();
String sConnStr = rdxmlgetSConnStr();
String userName = rdxmlgetUsername();
String passWord = rdxmlgetPassword();
注:配置文件connxml保存在webroot/WEB-INF目录中。
dom4j的写法大概如下:
String xml = "上述的xml字符串";Document doc = DocumentHelperparseText(xml);
Element rootElt = docgetRootElement();
//有了根节点以后就可以为所欲为了
String userName = rootEltelement("adaptor-attributes")attribute("user-name")asXML();
String password = rootEltelement("adaptor-attributes")attribute("password")asXML();
java中获取xml节点元素值 根据不同的处理xml方式不同而不同。
java中解析xml的方式:大体可以使用以下四种
------------------------------------------------------------
DOM(Document Object Model)
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,
然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来 *** 作这个树结构。
优点:整个文档树在内存中,便于 *** 作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)
SAX(Simple API for XML)
为解决DOM的问题,出现了SAX。SAX ,事件驱动。
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,
程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;
SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;
从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
DOM4J
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,
特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J
JDOM
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。
使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
------------------------------
参考代码
dom4j
------------------------------
import orgdom4jDocument;
import orgdom4jDocumentException;
import orgdom4jDocumentHelper;
import orgdom4jElement;
import orgdom4jioSAXReader;
import orgdom4jioXMLWriter;
---------------------------------------------
File f = new File("studentsxml");
SAXReader reader = new SAXReader();
Document doc = readerread(f);
Element root = docgetRootElement();
for (Iterator iter = rootelementIterator(); iterhasNext();) {
Element element = (Element) iternext();
// Systemoutprintln(elementattributeValue("email"));
String ids=elementelementText("stuId");
Systemoutprintln(ids);
String names=elementelementText("stuName");
Systemoutprintln(names);
String ages=elementelementText("age");
Systemoutprintln(ages);
}
------------------------------------
dom 方式
---------------
import javaxxmlparsers;
import javaxxmltransform;
import javaxxmltransformdomDOMSource;
import javaxxmltransformstreamStreamResult;
------------------------
DocumentBuilderFactory factory = DocumentBuilderFactorynewInstance();
// 允许名字空间
// factorysetNamespaceAware(true);
// 允许验证
// factorysetValidating(true);
// 获得DocumentBuilder的一个实例
DocumentBuilder builder = null;
try {
builder = factorynewDocumentBuilder();
} catch (ParserConfigurationException pce) {
Systemerrprintln(pce);
// 出异常时输出异常信息,然后退出,下同
Systemexit(1);
}
Document doc = null;
// 解析文档,并获得一个Document实例。
try {
try {
// InputStream is=new FileInputStream("studentsxml");
doc = builderparse("studentsxml");
// doc = builderparse(is);
} catch (SAXException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
} catch (DOMException dom) {
Systemerrprintln(domgetMessage());
Systemexit(1);
} catch (IOException ioe) {
Systemerrprintln(ioe);
// Systemexit(1);
}
for (int i = 0; i < nlStudentgetLength(); i++) {
Element elmtStudent = (Element) nlStudentitem(i);
String email = elmtStudentgetAttribute("email");
Systemoutprintln(email);
NodeList ids = elmtStudentgetElementsByTagName("stuId");
Element id = (Element)idsitem(0);
Node tId = idgetFirstChild();
Systemoutprintln(tIdgetNodeValue());
NodeList names = elmtStudentgetElementsByTagName("stuName");
Element e = (Element)namesitem(0);
Node tName = egetFirstChild();
Systemoutprintln(tNamegetNodeValue());
}
以上就是关于java读取xml的值全部的内容,包括:java读取xml的值、求高手帮忙JAVA 读取XML 文件,下面是我的XML文件,怎么在JAVA中 把他们全部显示出来。、怎么在java类中加载xml文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)