操作xml文件或者XML内存对象,得到某个节点的值

5 篇文章 0 订阅
package com.trs.rws.tools;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;
import com.trs.tool.*;
import com.trs.tool.Logger;
import com.trs.tool.TException;

/**
* <p>Title: xml操作类</p>
* <p>Description: 操作xml文件或者XML内存对象,得到某个节点的值!</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: www.trs.com.cn</p>
* @author huanghongfa
* @version 1.0
*/

public class OperateXML
{
private Document docDOMSource = null;

/**
* 构造函数
*/
public OperateXML()
{
super ();
}

/**
* 构造函数
* @param docDOMSource 内存中Document对象
*/
public OperateXML(Document docDOMSource)
{
super ();
this.docDOMSource = docDOMSource;
}

/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param docDOMSource 内存中Document对象
*/
public void setDOMSource(Document docDOMSource)
{
this.docDOMSource = docDOMSource;
}

/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param fDOMSource xml文件
*/
public void setDOMSource(File fDOMSource)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (fDOMSource);
doc.normalize ();
this.docDOMSource = doc;
}
catch(javax.xml.parsers.ParserConfigurationException pce)
{
pce.printStackTrace();
// throw new TException ("The parser was not configured correctly.", "", pce);
//System.out.println("The parser was not configured correctly.");
}
catch(java.io.IOException ie)
{
ie.printStackTrace();
// throw new TException ("Cannot read input file.", "", ie);
//System.out.println("Cannot read input file.");
}
catch(org.xml.sax.SAXException se)
{
se.printStackTrace();
// throw new TException ("Problem parsing the file.", "", se);
//System.out.println("Problem parsing the file.");
}
catch(java.lang.IllegalArgumentException ae)
{
ae.printStackTrace();
// throw new TException ("Please specify an XML source.", "", ae);
//System.out.println("Please specify an XML source.");
}
}

/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param ByteArrayInputStream 可以通过如下方法得到
* ByteArrayInputStream bais = new ByteArrayInputStream(strGet.getBytes("GBK"));
*/
public void setDOMSource(ByteArrayInputStream bais)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (bais);
doc.normalize ();
this.docDOMSource = doc;
}
catch(Exception ex)
{
ex.printStackTrace();
// Logger.log("解释xml的时候发生错误,输入的字符串不符合xml格式!" + ex.toString (),"exp");
// throw new TException ("解释xml的时候发生错误,输入的字符串不符合xml格式!" + ex.toString (), "");
}
}

/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param strXMLFileName xml文件名称,如:C:\\temp\\test.xml 格式
*/
public void setDOMSource(String strXMLFileName)
throws TException
{
try
{
File fDOMSource = new File (strXMLFileName);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (fDOMSource);
doc.normalize ();
this.docDOMSource = doc;
}
catch(javax.xml.parsers.ParserConfigurationException pce)
{
pce.printStackTrace();
// throw new TException ("The parser was not configured correctly.", "OperateXML,setDOMSource()");
}
catch(java.io.IOException ie)
{
ie.printStackTrace();
// throw new TException ("Cannot read input file.", "OperateXML,setDOMSource()");
}
catch(org.xml.sax.SAXException se)
{
se.printStackTrace();
// throw new TException ("Problem parsing the file.", "OperateXML,setDOMSource()");
}
catch(java.lang.IllegalArgumentException ae)
{
ae.printStackTrace();
// throw new TException ("Please specify an XML source.", "OperateXML,setDOMSource()");
}
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param ByteArrayInputStream 可以通过如下方法得到
* ByteArrayInputStream bais = new ByteArrayInputStream(strGet.getBytes("GBK"));
*/
public void setDOMSource(InputStream is)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (is);
doc.normalize ();
this.docDOMSource = doc;
}
catch(Exception ex)
{
ex.printStackTrace();
// throw new TException ("解释xml的时候发生错误,输入的XML文件流格式错误!" + ex.toString (), "");
}
}

/**
* 得到DOMSource
* @return org.w3c.dom.Document
*/
public Document getDOMSource()
{
return this.docDOMSource;
}

/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public String getValueByTargetName(String strTargetName)
{
String strValue = "";
NodeList nodelist = null;
Node node;
try
{
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
if(nodelist.getLength () != 0)
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
int i = nodelist.getLength ();
if(i == 1)
{
if(node.getFirstChild () != null)
{
strValue = node.getFirstChild ().getNodeValue ();
}
}
else
{
for(int j = 1; j < i; j++)
{
node = nodelist.item (j);
if(node.getNodeType () == Node.CDATA_SECTION_NODE)
{
strValue = node.getNodeValue ();
break;
}
}
}
}
return strValue;
}
catch(DOMException ex)
{
// Logger.log(ex.getMessage(),"exp");
return null;
}
}

/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public Hashtable getChildrenNodeNameAndValueByTargetName(String strTargetName)
{
Hashtable ht = new Hashtable ();
NodeList nodelist = null;
Node node;
int i, nSize;
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
if(nodelist.getLength () != 0)
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
nSize = nodelist.getLength ();
for(i = 0; i < nSize; i++)
{
node = nodelist.item (i);
if(node!=null && node.getNodeType()!=Node.TEXT_NODE)
{
if(node.getFirstChild ()!=null)
{
ht.put (node.getNodeName (), node.getFirstChild ().getNodeValue ());
}
else
{
ht.put (node.getNodeName (), "");
}
}
}
}
return ht;
}

/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public String[] getChildrenNodeValuesByTargetName(String strTargetName)
{
String[] arrValue=null;
NodeList nodeHList=null;
NodeList nodelist = null;
Node node;
int i, nSize;
nodeHList = docDOMSource.getElementsByTagName (strTargetName.trim ());
arrValue=new String[nodeHList.getLength ()];
if(nodeHList.getLength () != 0)
{
for(i=0;i<nodeHList.getLength();i++)
{
node = nodeHList.item (i);
nodelist = node.getChildNodes ();
if(nodelist.item(0)!=null)
{
if(nodelist.item (0).getNodeValue () == null)
{
arrValue[i] = "";
}
else
{
arrValue[i] = nodelist.item (0).getNodeValue ();
}
}
else
{
arrValue[i] ="";
}
}
}
return arrValue;
}

/**
* 通过置标的路径,得到该置标节点的值
* @param strTargetPath 该置标的路径
* @param ch 路径的隔开符号,如:可以这样调用这个方法:getValueByTargetPath("xml/test/ok",'/');
* @return String 假如不存在,就为空“”
*/
public String getValueByTargetPath(String strTargetPath, int ch)
{
String strPath = strTargetPath.trim ();
String strTargetName = null;
NodeList nodelist = null;
Node node = null;
Element element = null;
int nPosition = 0;
String strValue = "";

//得到第一个节点元素(begin)
nPosition = strPath.indexOf (ch);
strTargetName = strPath.substring (0, nPosition);
strPath = strPath.substring (nPosition + 1);
nodelist = docDOMSource.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
element = (Element) nodelist.item (0);
}
//得到第一个节点元素(end)

//循环解释路径,得到最低层的节点的值(begin)
while(!strPath.equals (""))
{
nPosition = strPath.indexOf (ch);
if(nPosition == -1)
{
strTargetName = strPath;
nodelist = element.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
int i = nodelist.getLength ();
if(i == 1)
{
if(node.getFirstChild () != null)
{
strValue = node.getFirstChild ().getNodeValue ();
}
}
else
{
for(int j = 1; j < i; j++)
{
node = nodelist.item (j);
if(node.getNodeType () == Node.CDATA_SECTION_NODE)
{
strValue = node.getNodeValue ();
break;
}
}
}
}
strPath = "";
}
else
{
strTargetName = strPath.substring (0, nPosition);
nodelist = element.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
element = (Element) nodelist.item (0);
}
strPath = strPath.substring (nPosition + 1);
}
}
//循环解释路径,得到最低层的节点的值(end)

return strValue;
}

/**
* 通过置标名称,得到该置标在XML中是否存在.
* @param strTargetName 该置标的名称
*/
public int getElementExist(String strTargetName)
{
int int_Counts=0;
NodeList nodelist = null;
try
{
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
int_Counts=nodelist.getLength ();
}
catch(DOMException ex)
{
// Logger.log (ex.getMessage (), "exp");
int_Counts=0;
}
finally
{
return int_Counts;
}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值