`
ygsilence
  • 浏览: 336745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

操作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包

相关推荐

    C#中操作xml文件(插入节点、修改、删除).htm

    C#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、...

    C#动态加载XML文件,并更改节点属性值

    在这个过程中,理解XPath(XML路径语言)也可以帮助更高效地定位XML节点。XPath是用于在XML文档中查找信息的语言,尽管在C#中不是必需的,但它提供了一种强大而灵活的方式来定位节点。 总之,C#通过`XDocument`类...

    vb读取xml文件节点值操作实例

    本实例将深入探讨如何在VB环境中不依赖XML.DLL库来读取XML文件的节点值。 首先,我们需要了解XML文件的基本结构。XML文件由一系列的元素(Element)组成,每个元素可以有属性(Attribute)和子元素。元素通过标签...

    XML文件追加Node节点

    对于不规范的XML,可能需要进行额外的错误检查和处理,例如验证XML是否符合语法规则,或者在添加节点时处理潜在的命名冲突。C#的XmlReader和XmlWriter类可以帮助我们处理这些情况,它们分别用于读取和写入XML数据,...

    C#读写XML文件,支持多层节点

    这个小测试程序的核心功能就是基于这些基本操作实现的,它不需要依赖任何第三方库,提供了便捷的方式处理多层XML节点,特别适合用于程序配置文件的读写。在实际项目中,为了代码的可维护性和健壮性,建议封装成类或...

    c++操作xml文件

    3. **操作XML节点**:通过CXmlNode对象,查找、修改或创建XML节点。例如,找到特定ID的元素,更改其属性值,或者添加新的子节点。 4. **处理节点集合**:CXmlNodes类可以用来管理一组节点,如遍历所有子元素,或者...

    PB解析xml指定路径的节点内容

    标题中的“PB”指的是PowerBuilder,一款经典的面向对象的编程工具,主要用于开发企业级的应用程序。...通过参考示例代码,开发者可以学习到如何根据XPath定位XML节点,并从中提取所需信息,提升他们的编程技能。

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    总结,PowerBuilder 9为处理XML文件提供了强大的支持,通过XMLDocument对象和DOM解析器,我们可以轻松地读取、写入和操作XML数据。这些功能使PB9成为开发涉及XML的应用的理想工具,帮助开发者高效地完成数据交换和...

    易语言读入xml数据节点值

    下面是一个简单的易语言源码示例,展示了如何读取XML文件中指定节点的值: ```易语言 .声明函数 读取XML 调用库 "系统核心", "创建XML文档", 文档路径, 文档 .如果 错误代码 ≠ 0 .显示 错误信息 .退出程序 .结束...

    修改xml节点的值修改xml节点的值

    无论使用哪种语言,修改XML节点值的过程都遵循类似的步骤:解析文件,找到目标节点,修改节点值,然后保存更改。在实际操作中,应确保正确处理可能出现的异常,并根据具体需求进行适当的错误处理和边界条件检查。

    VS之XML文件操作

    - DOM允许开发者将XML文件加载到内存中,形成一个可操作的对象树。使用C#或VB.NET,可以使用`System.Xml.XmlDocument`类来加载XML文件,然后通过节点遍历和操作来读写数据。 4. **LINQ to XML**: - .NET ...

    Delphi中创建简单XMl文件以及读取XML子节点下所有属性的方法

    本篇文章将详细讲解如何在Delphi中创建简单的XML文件,并介绍如何读取XML子节点下的所有属性。 首先,让我们了解XML的基本结构。XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等构成,...

    xml.zip_matlab读取xml文件实例_xml文件读取

    `xmlread`用于读取XML文件并将其转换为一个文档对象模型(DOM)树,而`xmlwrite`则可以将DOM树写回到XML文件。DOM树是一种数据结构,它代表了XML文件的整个内容,允许我们遍历和修改文件的各个部分。 例如,假设...

    读写xml所有节点个人小结和读取xml节点的数据总结

    #### 二、读取XML节点数据 **1. 加载XML文档** 要开始读取XML文件,首先需要加载文件到`XmlDocument`对象中: ```csharp string filename = Server.MapPath("/") + @"WebApplication1\web.config"; XmlDocument ...

    QT读取xml文件将所有节点保存到treewidget中

    // 初始化QTreeWidgetItem,用于存储XML节点 QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget); rootItem-&gt;setText(0, "XML根节点"); // 开始解析XML while (!reader.atEnd()) { reader.read...

    QT xml文件的读写,增减,更新。

    8. **QDomElement与QDomNode**: `QDomElement`代表XML文档中的元素节点,而`QDomNode`是所有XML节点的基类,包括元素、注释、文本等。它们都提供了丰富的操作接口,用于处理XML文档的不同部分。 以上就是使用QT进行...

    Qt5 XML文件的解析,增删改查节点。

    你可以使用QDomDocument的parse()方法加载XML字符串或文件,将其转换为内存中的对象模型。例如: ```cpp QFile file("example.xml"); file.open(QIODevice::ReadOnly | QIODevice::Text); QDomDocument doc; if (!...

    读取XML文件的四种方法

    使用DOM方法读取XML文件,需要创建DocumentBuilderFactory对象,获取DocumentBuilder对象,然后解析XML文件得到Document对象。最后,使用Document对象的getElementsByTagName方法获取指定标签的节点列表,并遍历节点...

    C# 操作XML文件 实例源码(文件处理)

    4. **修改XML节点**: 可以通过XmlNode的属性和方法来修改节点的值或属性。例如,要修改某个节点的文本内容: ```csharp XmlNode node = doc.SelectSingleNode("//element_name"); node.InnerText = "new_value...

    XML文件增加节点 删除节点 编辑节点 以及分页效果

    4. **XmlNodeList**: 用来存储一系列XmlNode对象,通常用于遍历XML节点。 要**增加节点**,我们先创建一个新的XmlElement对象,然后通过`AppendChild`或`InsertAfter`等方法将其添加到父节点中。例如,向上面的XML...

Global site tag (gtag.js) - Google Analytics