⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kxmltool.java

📁 j2me手机制作
💻 JAVA
字号:
/*
   xml文档读写类

   m_xpp xml解析器
   m_root 根节点
   m_doc xml文档

           杨翊
               powerise pdc.D develop ceneter
 */

package com.talkweb.micp.icpl.systool;

import java.io.*;
import java.util.*;

import org.kxml.*;
import org.kxml.io.*;
import org.kxml.kdom.*;
import org.kxml.parser.*;


public class KXmlTool {
    private XmlParser m_xpp = null;
    private Element m_root = null;
    Document m_doc = null;
    //构造函数
    public KXmlTool(Reader reader) throws Exception {
        try {
            m_xpp = new XmlParser(reader);
            m_doc = new Document();
            m_doc.parse(m_xpp);
            m_root = m_doc.getRootElement();
        } catch (java.io.IOException ex) {
            throw new Exception("解析XML文档出错,错误描述:" + ex.toString());
        }
    }

    //构造函数
    public KXmlTool(InputStream is) throws Exception {
        this(new InputStreamReader(is));
    }



    //构造函数
    public KXmlTool(byte[] bt) throws Exception {
        this(new ByteArrayInputStream(bt));
    }

  //构造函数
    public KXmlTool(String sXml) throws Exception {
        this(new ByteArrayInputStream(sXml.getBytes()));
    }

    //缺损构造函数
    public KXmlTool() {

    }

    //将XML内存映相转化为字符串
    public String toXmlString() throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        XmlWriter xwr = new XmlWriter(new OutputStreamWriter(bos));
        try {
            m_root.write(xwr);
            xwr.flush();
        } catch (IOException ex) {
            throw new Exception("写XML文档出错,错误描述:" + ex.toString());
        }
        return trimall(m_root.toString());
    }

    //新建一个XML文档,返回根元素
    public Element newXml(String sRoot) {
        m_doc = new Document();
        m_root = m_doc.createElement(Xml.NO_NAMESPACE, sRoot);
        return m_root;
    }

    /*
     添加一个子节点
     parent : 父节点
     sName:添加的子结点名字
     sText:子结点的文本
     vtAttr:子结点的属性
     */
    public Element appendElement(Element parent, String sName, String sText,
                                 Hashtable htAttr) {
        Element element = m_doc.createElement(Xml.NO_NAMESPACE, sName);
        appendText(element, sText);
        setElementAttr(element, htAttr);
        parent.addChild(Xml.ELEMENT, element);
        return element;
    }

    /*
         添加一个子节点
         parent : 父节点
         sName:添加的子结点名字
         sText:子结点的文本
     */
    public Element appendElement(Element parent, String sName, String sText) {
        return appendElement(parent, sName, sText, null);
    }

    /*
         添加一个子节点
         parent : 父节点
         sName:添加的子结点名字
     */
    public Element appendElement(Element parent, String sName) {
        return appendElement(parent, sName, null, null);
    }

    /*
         设置element节点的文本
         element 节点
         sText 添加的文本
     */
    public void appendText(Element element, String sText) {
        if (sText != null) {
            element.addChild(Xml.TEXT, sText);
        }
    }

    /*
       设置element节点的文本
       element 节点
       ht 属性
     */
    public void setElementAttr(Element element, Hashtable ht) {
        if (ht != null) {
            Enumeration keys = ht.keys();
            String sAttrName = "";
            String sAttrVal = "";
            while (keys.hasMoreElements()) {
                sAttrName = (String) keys.nextElement();
                sAttrVal = (String) ht.get(sAttrName);
                element.setValue(sAttrName, sAttrVal);
            }
        }
    }

    /*
      获取XML文档的根元素
     */
    public Element getRoot() {
        return m_root;
    }

    /*
     获取XML文档
     */
    public Document getDoc() {
        return m_doc;
    }

    /*
         返回所有名字为sName的节点
     */
    public Vector getAllElementByName(String sName) {
        Vector vt = new Vector();
        getSubElement(m_root, vt, sName);
        return vt;
    }

    /*
        返回所有element的子节点中名字为sName的节点
     */
    public void getSubElement(Element element, Vector vt, String sName) {
        if (element.getChildCount() > 0) {
            for (int i = 0; i < element.getChildCount(); ++i) {
                if (element.getType(i) == Xml.ELEMENT) {
                    getSubElement((Element) element.getChild(i), vt, sName);
                }
            }
            Vector tmpVt = getChildElement(element, sName, true);
            for (int i = 0; i < tmpVt.size(); ++i) {
                vt.addElement(tmpVt.elementAt(i));
            }
        }
    }

    /*
        返回所有属性sAttrName等于属性值sAttrVal的节点
     */
    public Vector getAllElementByAttrVal(String sAttrName, String sAttrVal) {
        Vector vt = new Vector();
        getSubElementByAttrVal(m_root, sAttrName, sAttrVal, vt);
        return vt;
    }

    /*
        返回所有element的子节点中属性sAttrName等于属性值sAttrVal的节点
     */
    public void getSubElementByAttrVal(Element element, String sName,
                                       String sAttrVal, Vector vt) {
        for (int i = 0; i < element.getChildCount(); ++i) {
            if (element.getType(i) == Xml.ELEMENT) {
                getSubElementByAttrVal((Element) element.getChild(i), sName,
                                       sAttrVal, vt);
            }
        }
        for (int i = 0; i < element.getAttributeCount(); ++i) {
            if (getAttributeName(element.getAttribute(i)).equals(sName) &&
                getAttributeVal(element.getAttribute(i)).equals(sAttrVal)) {
                vt.addElement(element);
            }
        }
    }

    private String getAttributeName(Attribute attr) {
        return attr.getName();
    }

    private String getAttributeVal(Attribute attr) {
        return attr.getValue();
    }


    private Vector getChildElement(Element element, String sName, boolean match) {
        Vector vt = new Vector();
        for (int i = 0; i < element.getChildCount(); ++i) {
            if (element.getType(i) == Xml.ELEMENT) {
                if (match) {
                    if (sName.equals(((Element) element.getChild(i)).getName())) {
                        vt.addElement(element.getChild(i));
                    }
                } else {
                    vt.addElement(element.getChild(i));
                }
            }
        }
        return vt;
    }

    /*
        返回element的子节点中所有名字为sName的节点
     */

    public Vector getChildElement(Element element, String sName) {
        return getChildElement(element, sName, true);
    }

    /*
        返回所有element的子节点
     */
    public Vector getChildElement(Element element) {
        return getChildElement(element, " ", false);
    }

    /*
        返回所有element的父节点
     */
    public Element getParentElement(Element element) {
        return (Element) element.getParent();
    }


    /*
        返回所有element的名字
     */
    public String getElementName(Element element) {
        return element.getName();
    }

    /*
        返回element的文本
     */
    public String getElementText(Element element) {
        for (int i = 0; i < element.getChildCount(); ++i) {
            if (element.getType(i) == Xml.TEXT) {
                return element.getText(i);
            }
        }
        return "";
    }

    /*
        返回所有element的属性
     */
    public Hashtable getElementAttr(Element element) {
        Hashtable ht = new Hashtable();
        for (int i = 0; i < element.getAttributeCount(); ++i) {
            ht.put(getAttributeName(element.getAttribute(i)),
                   getAttributeVal(element.getAttribute(i)));
        }
        return ht;
    }

    /*
       返回element中属性名为sNmae的属性值
     */
    public String getElementAttrVal(Element element, String sName) {
        for (int i = 0; i < element.getAttributeCount(); ++i) {
            if (getAttributeName(element.getAttribute(i)).equals(sName)) {
                return getAttributeVal(element.getAttribute(i));
            }
        }
        return null;
    }

    public static String trimall(String str) {
        StringBuffer tmp = new StringBuffer();
        int begin = -1, i = 0, k = 0;
        i = str.length();
        for (k = 0; k < i; ++k) {
            if (str.charAt(k) != ' ' && str.charAt(k) != '\n' &&
                str.charAt(k) != '\r'&& str.charAt(k) != '\t') {
                if (begin == -1) {
                    begin = k;
                }
                if ((k == i - 1) && (begin != -1)) {
                    tmp.append(str.substring(begin));
                }
            } else {
                if (begin == -1) {
                    continue;
                }
                if (isAttr(str, k + 1)) {
                    continue;
                }
                tmp.append(str.substring(begin, k));
                begin = -1;
            }

        }
        return tmp.toString().trim();
    }

    public static boolean isAttr(String xml, int i) {
        if (i >= xml.length()) {
            return false;
        }
        if (xml.charAt(i) == ' ' || xml.charAt(i) == '\n' ||
            xml.charAt(i) == '\r') {
            i++;
            if (i >= xml.length()) {
                return false;
            }
        } else {
            if (xml.charAt(i) != '<') {
                return true;
            }
        }
        return false;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -