`

w3c xml 操作类

 
阅读更多
以下从网上找的,自己最近在一个小功能上需要应用
记录下来。

package rochoc.xml.oper;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

/**
* 类名:XmlBuilder  <p>
* 类描述:根据传入的XML文件生成Document和root结点 <p>
* 主要public成员变量:<p>
* 主要public方法:   <p>
**/

public class XmlBuilder
{
    /**
     *构造函数说明:       <p>
     *参数说明:@param path   <p>
    **/
    public XmlBuilder(String path)
    {
        this.path=path;
        init();
    }
   
    /**
    * 方法名称:init<p>
    * 方法功能:初始化函数<p>
    * 参数说明: <p>
    * 返回:void <p>
    **/
    public void init()
    {
        buildDocument();
        buildRoot();
    }
   
    /**
    * 方法名称:buildDocument<p>
    * 方法功能:将XML文件生成Document <p>
    * 参数说明: <p>
    **/
    private void buildDocument()
    {
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try
        {
            DocumentBuilder builder=factory.newDocumentBuilder();
            logger.debug("Construct document builder success.");
            doc=builder.parse(new File(path));           
            logger.debug("Build xml document success.");
        }catch(ParserConfigurationException e)
        {
            logger.error("Construct document builder error:"+e);
        }catch(SAXException e)
        {
            logger.error("Parse xml file error:"+e);
        }catch(IOException e)
        {
            logger.error("Read xml file error:"+e);
        }
    }
   
 
    private void buildRoot()
    {
        root=doc.getDocumentElement();
    }
   
    /**
     * @return 返回 doc。
     */
    public Document getDoc()
    {
        return doc;
    }
    /**
     * @param doc 要设置的 doc。
     */
    public void setDoc(Document doc)
    {
        this.doc = doc;
    }
    /**
     * @return 返回 path。
     */
    public String getPath()
    {
        return path;
    }
    /**
     * @param path 要设置的 path。
     */
    public void setPath(String path)
    {
        this.path = path;
    }
    /**
     * @return 返回 root。
     */
    public Element getRoot()
    {
        return root;
    }
    /**
     * @param root 要设置的 root。
     */
    public void setRoot(Element root)
    {
        this.root = root;
    }
    /*全局变量*/
    private String path=null;//xml文件路径
    private Document doc=null;//xml文件对应的document
    private Element root=null;//xml文件的根结点
    private Logger logger=Logger.getLogger(getClass().getName());
}


package rochoc.xml.oper;

import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
* 类名:XmlOper  <p>
* 类描述:对XML文件进行读写操作,均为静态函数 <p>
* 主要public成员变量:<p>
* 主要public方法:   <p>
**/

public class XmlOper
{
    /**
     *构造函数说明:       <p>
     *参数说明:   <p>
    **/
    private XmlOper()
    {       
    }
   
    /**
    * 方法名称:getNodeList<p>
    * 方法功能:获取父结点parent的所有子结点<p>
    * 参数说明:@param parent
    * 参数说明:@return <p>
    * 返回:NodeList <p>
    **/
    public static NodeList getNodeList(Element parent)
    {
        return parent.getChildNodes();
    }
   
    /**
    * 方法名称:getElementsByName<p>
    * 方法功能:在父结点中查询指定名称的结点集            <p>
    * 参数说明:@param parent
    * 参数说明:@param name
    * 参数说明:@return <p>
    * 返回:Element[] <p>
    **/
    public static Element [] getElementsByName(Element parent,String name)
    {
        ArrayList resList=new ArrayList();
        NodeList nl=getNodeList(parent);
        for(int i=0;i<nl.getLength();i++)
        {
            Node nd=nl.item(i);
            if(nd.getNodeName().equals(name))
            {
                resList.add(nd);
            }
        }
        Element [] res=new Element [resList.size()];
        for(int i=0;i<resList.size();i++)
        {
            res[0]=(Element)resList.get(i);
        }       
        logger.debug(parent.getNodeName()+"'s children of "+name+
                "'s num:"+res.length);
        return res;
    }
   
    /**
    * 方法名称:getElementName<p>
    * 方法功能:获取指定Element的名称            <p>
    * 参数说明:@param element
    * 参数说明:@return <p>
    * 返回:String <p>
    **/
    public static String getElementName(Element element)
    {
        return element.getNodeName();
    }
   
    /**
    * 方法名称:getElementValue<p>
    * 方法功能:获取指定Element的值<p>
    * 参数说明:@param element
    * 参数说明:@return <p>
    * 返回:String <p>
    **/
    public static String getElementValue(Element element)
    {
        NodeList nl=element.getChildNodes();
        for(int i=0;i<nl.getLength();i++)
        {
            if(nl.item(i).getNodeType()==Node.TEXT_NODE)//是一个Text Node
            {           
                logger.debug(element.getNodeName()+" has a Text Node.");
                return element.getFirstChild().getNodeValue();
            }
        }  
        logger.error(element.getNodeName()+" hasn't a Text Node.");
        return null;
    }
   
    /**
    * 方法名称:getElementAttr<p>
    * 方法功能:获取指定Element的属性attr的值            <p>
    * 参数说明:@param element
    * 参数说明:@param attr
    * 参数说明:@return <p>
    * 返回:String <p>
    **/
    public static String getElementAttr(Element element,String attr)
    {
        return element.getAttribute(attr);
    }
   
    /**
    * 方法名称:setElementValue<p>
    * 方法功能:设置指定Element的值            <p>
    * 参数说明:@param element
    * 参数说明:@param val <p>
    * 返回:void <p>
    **/
    public static void setElementValue(Element element,String val)
    {
        Node node=element.getOwnerDocument().createTextNode(val);
        NodeList nl=element.getChildNodes();
        for(int i=0;i<nl.getLength();i++)
        {
            Node nd=nl.item(i);
            if(nd.getNodeType()==Node.TEXT_NODE)//是一个Text Node
            {           
                  nd.setNodeValue(val);
                  logger.debug("modify "+element.getNodeName()+"'s node value succe.");
                  return;
            }
        }  
        logger.debug("new "+element.getNodeName()+"'s node value succe.");
        element.appendChild(node);       
    }
   
    /**
    * 方法名称:setElementAttr<p>
    * 方法功能:设置结点Element的属性<p>
    * 参数说明:@param element
    * 参数说明:@param attr
    * 参数说明:@param attrVal <p>
    * 返回:void <p>
    **/
    public static void setElementAttr(Element element,
            String attr,String attrVal)
    {
        element.setAttribute(attr,attrVal);
    }
   
   
    /**
    * 方法名称:addElement<p>
    * 方法功能:在parent下增加结点child<p>
    * 参数说明:@param parent
    * 参数说明:@param child <p>
    * 返回:void <p>
    **/
    public static void addElement(Element parent,Element child)
    {
        parent.appendChild(child);
    }
   
    /**
    * 方法名称:addElement<p>
    * 方法功能:在parent下增加字符串tagName生成的结点<p>
    * 参数说明:@param parent
    * 参数说明:@param tagName <p>
    * 返回:void <p>
    **/
    public static void addElement(Element parent,String tagName)
    {       
        Document doc=parent.getOwnerDocument();
        Element child=doc.createElement(tagName);
        parent.appendChild(child);
    }
   
    /**
    * 方法名称:addElement<p>
    * 方法功能:在parent下增加tagName的Text结点,且值为text<p>
    * 参数说明:@param parent
    * 参数说明:@param tagName
    * 参数说明:@param text <p>
    * 返回:void <p>
    **/
    public static void addElement(Element parent,String tagName,String text)
    {
        Document doc=parent.getOwnerDocument();
        Element child=doc.createElement(tagName);
        setElementValue(child,text);
        parent.appendChild(child);
    }
   
    /**
    * 方法名称:removeElement<p>
    * 方法功能:将父结点parent下的名称为tagName的结点移除<p>
    * 参数说明:@param parent
    * 参数说明:@param tagName <p>
    * 返回:void <p>
    **/
    public static void removeElement(Element parent,String tagName)
    {
        logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" begin...");
        NodeList nl=parent.getChildNodes();
        for(int i=0;i<nl.getLength();i++)
        {
            Node nd=nl.item(i);
            if(nd.getNodeName().equals(tagName))
            {
                parent.removeChild(nd);
                logger.debug("remove child '"+nd+"' success.");
            }
        }
        logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" end.");
    }
   
   
    /*全局变量*/   
    static Logger logger=Logger.getLogger("XmlOper");
}

XmlCreater.java

用于创建XML文件

/********************************************************************
* 项目名称    :rochoc   <p>
* 包名称      :rochoc.xml.oper <p>
* 文件名称    :XmlCreater   <p>
* 程序功能(类)描述 : 创建DOM并生成XML文件      <p>
*
* 程序变更日期   :
* 变更作者    :
* 变更说明    :
********************************************************************/
package rochoc.xml.oper;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
* 类名:XmlCreater  <p>
* 类描述: 创建DOM并生成XML文件<p>
* 主要public成员变量:<p>
* 主要public方法:   <p>
**/

public class XmlCreater
{
    /**
     *构造函数说明:       <p>
     *参数说明:@param path  xml文件路径 <p>
    **/
    public XmlCreater(String path)
    {
        this.path=path;
        init();
    }
   
    /**
    * 方法名称:init<p>
    * 方法功能: 初始化函数           <p>
    * 参数说明: <p>
    * 返回:void <p>
    **/
    private void init()
    {
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try
        {
            DocumentBuilder builder=factory.newDocumentBuilder();
            doc=builder.newDocument();//新建DOM
        }catch(ParserConfigurationException e)
        {
            logger.error("Parse DOM builder error:"+e);
        }
    }
   
    /**
    * 方法名称:createRootElement<p>
    * 方法功能:创建根结点,并返回            <p>
    * 参数说明:@param rootTagName <p>
    * 返回:Element <p>
    **/
    public Element createRootElement(String rootTagName)
    {    
        if(doc.getDocumentElement()==null)
        {
            logger.debug("create root element '"+rootTagName+"' success.");
            Element root=doc.createElement(rootTagName);
            doc.appendChild(root);
            return root;
        }
        logger.warn("this dom's root element is exist,create fail.");
        return doc.getDocumentElement();
    }
   
    /**
    * 方法名称:createElement<p>
    * 方法功能:在parent结点下增加子结点tagName<p>
    * 参数说明:@param parent
    * 参数说明:@param tagName <p>
    * 返回:Element <p>
    **/
    public Element createElement(Element parent,String tagName)
    {
        Document doc=parent.getOwnerDocument();
        Element child=doc.createElement(tagName);
        parent.appendChild(child);       
        return child;
    }
   
    /**
    * 方法名称:createElement<p>
    * 方法功能:在parent结点下增加值为value的子结点tabName<p>
    * 参数说明:@param parent
    * 参数说明:@param tagName
    * 参数说明:@param value <p>
    * 返回:Element <p>
    **/
    public Element createElement(Element parent,String tagName,String value)
    {
        Document doc=parent.getOwnerDocument();
        Element child=doc.createElement(tagName);
        XmlOper.setElementValue(child,value);
        parent.appendChild(child);
        return child;
    }
   
    /**
    * 方法名称:createAttribute<p>
    * 方法功能:在parent结点下增加属性 <p>
    * 参数说明:@param parent
    * 参数说明:@param attrName 属性名
    * 参数说明:@param attrValue 属性值<p>
    * 返回:void <p>
    **/
    public void createAttribute(Element parent,String attrName,String attrValue)
    {
        XmlOper.setElementAttr(parent,attrName,attrValue);       
    }
   
    /**
    * 方法名称:buildXmlFile<p>
    * 方法功能:根据DOM生成XML文件<p>
    * 参数说明: <p>
    * 返回:void <p>
    **/
    public void buildXmlFile()
    {
        TransformerFactory tfactory=TransformerFactory.newInstance();
        try
        {
            Transformer transformer=tfactory.newTransformer();
            DOMSource source=new DOMSource(doc);
            logger.debug("New DOMSource success.");
            StreamResult result=new StreamResult(new File(path));
            logger.debug("New StreamResult success.");
            transformer.setOutputProperty("encoding","GBK");
            transformer.transform(source,result);
            logger.debug("Build XML File '"+path+"' success.");
        }catch(TransformerConfigurationException e)
        {
            logger.error("Create Transformer error:"+e);
        }catch(TransformerException e)
        {
            logger.error("Transformer XML file error:"+e);
        }
    }
   
    /**
     * @return 返回 doc。
     */
    public Document getDoc()
    {
        return doc;
    }
    /**
     * @param doc 要设置的 doc。
     */
    public void setDoc(Document doc)
    {
        this.doc = doc;
    }
    /**
     * @return 返回 path。
     */
    public String getPath()
    {
        return path;
    }
    /**
     * @param path 要设置的 path。
     */
    public void setPath(String path)
    {
        this.path = path;
    }
    /*全局变量*/
    private Logger logger = Logger.getLogger(getClass().getName());
    private Document doc=null;//新创建的DOM
    private String path=null;//生成的XML文件绝对路径
}


分享到:
评论

相关推荐

    xml2excel,java解析xml文件

    使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可以实现DOM解析。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom....

    JAVA对xml操作

    象模型)是一种标准的W3C规范,用于处理XML文档。DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML数据。在Java中,DOM解析有多种实现,包括标准的JDK API、dom4j和...

    java对xml操作的项目案例

    Java中,`javax.xml.parsers.DocumentBuilderFactory` 和 `org.w3c.dom.Document` 类用于创建和操作DOM对象。例如,可以使用`DocumentBuilder.parse()`方法读取XML文件,然后通过DOM API遍历和修改文档结构。 2. ...

    java一键xml转map,一键map转xml工具类

    在XML和Map的转换过程中,可能用到了如`dom4j`或`jaxb`等库,它们提供了方便的XML操作API。这些库可以通过Maven引入,添加到项目的pom.xml文件中。例如,`dom4j`的依赖可以这样写: ```xml &lt;groupId&gt;dom4j ...

    w3c文档中文版

    W3C(World Wide Web Consortium)是互联网标准化组织,致力于制定和维护网络技术的标准,以确保全球信息的互操作性和兼容性。这个压缩包包含的是W3C规范的中文版,对于前端开发者来说,是理解和掌握网页开发核心...

    w3c系列教程

    【标题】:“W3C系列教程” 这是一套全面深入的W3C标准教程,涵盖了Web开发中的核心语言和技术,包括HTML(超文本标记语言)、CSS(层叠样式表)以及JavaScript,同时还涉及XML(可扩展标记语言)。这些技术是构建...

    VC++ ,XML类,XML文件读写类

    `Markup`类为VC++的XML操作提供了一种简洁的解决方案,通过封装XML DOM接口,简化了开发过程。理解和利用这个类,可以高效地实现XML文件的读写,提高开发效率。对于需要处理XML的VC++项目,使用这样的自定义类无疑...

    xml与实体类转换工具

    1. **解析XML**:使用`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`来解析XML字符串,生成一个`org.w3c.dom.Document`对象。 2. **创建实体类的Java类型信息**:JAXB需要知道实体类的结构,通过`@...

    介绍两个 XML 文件操作类

    本篇文章将重点介绍两个常用的XML文件操作类:DOM解析器和JAXB(Java Architecture for XML Binding)。 1. DOM解析器: DOM解析器是基于树形结构来处理XML文档的。它将整个XML文件加载到内存中,形成一个文档对象...

    java xml.java操作XML文档

    4. JDOM和DOM4J: 这两个库是对DOM API的增强,提供了更简洁的API,便于进行XML操作。例如,JDOM使用Java对象模型直接映射XML元素,而DOM4J则提供了灵活且强大的XML处理功能。 5. JAXB (Java Architecture for XML ...

    xml 操作类

    以下是对XML操作类的详细介绍: 1. **XmlDocument类**: - XmlDocument是.NET Framework中的核心XML处理类,它实现了IXmlNamespaceResolver接口,并遵循W3C DOM(Document Object Model)规范。 - XmlDocument...

    除activiti本身架包以外所依赖的所有架包,包括bitik、w3c、xml、javaGeom等

    综上所述,集成Activiti涉及到对多种依赖库的理解和管理,包括可能需要的Birt、W3C规范、XML处理以及几何计算等。理解这些依赖的作用以及它们如何与Activiti协同工作,对于成功构建和运行包含Activiti的项目至关重要...

    W3C教程完全版离线版

    W3C,全称World Wide Web Consortium(万维网联盟),是制定和维护Web标准的国际组织,它的目标是促进Web的互操作性和无障碍性。W3C的标准涵盖了HTML(超文本标记语言)、CSS(层叠样式表)、XML(可扩展标记语言)...

    w3c全套开发手册

    W3C,即万维网联盟(World Wide Web Consortium),是制定互联网标准的国际组织,其目标是确保全球Web的互操作性和开放性。这套手册对于Web开发者来说,是一份极其宝贵的参考资料。 1. **HTML5**:作为网页内容的...

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的方法;作为元素和节点的基类调用 3、IXMLDOMAttribute类:就是元素或节点的属性类 4...

    w3school HTML XML Javascript 全部内容

    ECMAScript是JavaScript的标准化规范,ES6(ECMAScript 2015)及以上版本引入了模块系统、类、Promise等新特性,使JavaScript更加强大和现代。 在w3school这个在线学习平台上,你可以找到关于HTML、XML和JavaScript...

    C# 操作XML文档 使用XmlDocument类方法

    它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存。对于很大的XML文档,可以使用XmlReader类来读取。因为XmlReader使用Steam(流...

    java中文API和W3CAPI

    【标题】"java中文API和W3CAPI" 涵盖了编程语言和技术标准的重要参考资料,主要包括Java、JavaScript、XML、CSS以及HTML的API文档。这些API是开发者日常工作中不可或缺的工具,提供了详细的类库函数说明,帮助程序员...

    java操作xml相关jar

    在实际项目中,选择哪种解析方式取决于需求,如文件大小、性能要求、内存限制以及对XML操作的复杂程度。正确使用这些JAR文件,能够帮助开发者高效、灵活地处理XML数据,提升项目的可维护性和性能。

    Java解析XML工具类--(java源码)

    * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的...

Global site tag (gtag.js) - Google Analytics