?? kxmltool.java
字號(hào):
/*
xml文檔讀寫(xiě)類(lèi)
m_xpp xml解析器
m_root 根節(jié)點(diǎn)
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;
//構(gòu)造函數(shù)
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文檔出錯(cuò),錯(cuò)誤描述:" + ex.toString());
}
}
//構(gòu)造函數(shù)
public KXmlTool(InputStream is) throws Exception {
this(new InputStreamReader(is));
}
//構(gòu)造函數(shù)
public KXmlTool(byte[] bt) throws Exception {
this(new ByteArrayInputStream(bt));
}
//構(gòu)造函數(shù)
public KXmlTool(String sXml) throws Exception {
this(new ByteArrayInputStream(sXml.getBytes()));
}
//缺損構(gòu)造函數(shù)
public KXmlTool() {
}
//將XML內(nèi)存映相轉(zhuǎn)化為字符串
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("寫(xiě)XML文檔出錯(cuò),錯(cuò)誤描述:" + ex.toString());
}
return trimall(m_root.toString());
}
//新建一個(gè)XML文檔,返回根元素
public Element newXml(String sRoot) {
m_doc = new Document();
m_root = m_doc.createElement(Xml.NO_NAMESPACE, sRoot);
return m_root;
}
/*
添加一個(gè)子節(jié)點(diǎn)
parent : 父節(jié)點(diǎn)
sName:添加的子結(jié)點(diǎn)名字
sText:子結(jié)點(diǎn)的文本
vtAttr:子結(jié)點(diǎn)的屬性
*/
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;
}
/*
添加一個(gè)子節(jié)點(diǎn)
parent : 父節(jié)點(diǎn)
sName:添加的子結(jié)點(diǎn)名字
sText:子結(jié)點(diǎn)的文本
*/
public Element appendElement(Element parent, String sName, String sText) {
return appendElement(parent, sName, sText, null);
}
/*
添加一個(gè)子節(jié)點(diǎn)
parent : 父節(jié)點(diǎn)
sName:添加的子結(jié)點(diǎn)名字
*/
public Element appendElement(Element parent, String sName) {
return appendElement(parent, sName, null, null);
}
/*
設(shè)置element節(jié)點(diǎn)的文本
element 節(jié)點(diǎn)
sText 添加的文本
*/
public void appendText(Element element, String sText) {
if (sText != null) {
element.addChild(Xml.TEXT, sText);
}
}
/*
設(shè)置element節(jié)點(diǎn)的文本
element 節(jié)點(diǎn)
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的節(jié)點(diǎn)
*/
public Vector getAllElementByName(String sName) {
Vector vt = new Vector();
getSubElement(m_root, vt, sName);
return vt;
}
/*
返回所有element的子節(jié)點(diǎn)中名字為sName的節(jié)點(diǎn)
*/
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的節(jié)點(diǎn)
*/
public Vector getAllElementByAttrVal(String sAttrName, String sAttrVal) {
Vector vt = new Vector();
getSubElementByAttrVal(m_root, sAttrName, sAttrVal, vt);
return vt;
}
/*
返回所有element的子節(jié)點(diǎn)中屬性sAttrName等于屬性值sAttrVal的節(jié)點(diǎn)
*/
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的子節(jié)點(diǎn)中所有名字為sName的節(jié)點(diǎn)
*/
public Vector getChildElement(Element element, String sName) {
return getChildElement(element, sName, true);
}
/*
返回所有element的子節(jié)點(diǎn)
*/
public Vector getChildElement(Element element) {
return getChildElement(element, " ", false);
}
/*
返回所有element的父節(jié)點(diǎn)
*/
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;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -