java读取xml的值

java读取xml的值,第1张

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文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9572540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存