读书人

操作xml资料或者XML内存对象得到某个

发布时间: 2012-12-27 10:17:10 作者: rapoo

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

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;    }  }}
1 楼 soft234 2012-07-04 本想用下看看 可是没jar包

读书人网 >XML SOAP

热点推荐