*/
public static String toString(Node node) {
if (node == null) {
throw new IllegalArgumentException();
}
Transformer transformer = newTransformer();
if (transformer != null) {
try {
StringWriter sw = new StringWriter();
transformer.transform(new DOMSource(node),
new StreamResult(sw));
return sw.toString();
} catch (TransformerException te) {
throw new RuntimeException(te.getMessage());
}
}
return errXMLString("不能生成XML信息!");
}
/**
* 將傳入的一個DOM Node對象輸出成字符串。如果失敗則返回一個空字符串""。
* @param node DOM Node 對象。
* @return a XML String from node
*/
public static String toString(Node node) {
if (node == null) {
throw new IllegalArgumentException();
}
Transformer transformer = newTransformer();
if (transformer != null) {
try {
StringWriter sw = new StringWriter();
transformer.transform(new DOMSource(node),new StreamResult(sw));
return sw.toString();
} catch (TransformerException te) {
throw new RuntimeException(te.getMessage());
}
}
return errXMLString("不能生成XML信息!");
}
/**
* 獲取一個Transformer對象,由於使用時都做相同的初始化,所以提取出來作為公共方法。
* @return a Transformer encoding gb2312
*/
public static Transformer newTransformer() {
try {
Transformer transformer =TransformerFactory.newInstance().newTransformer();
Properties properties = transformer.getOutputProperties();
properties.setProperty(OutputKeys.ENCODING, "gb2312");
properties.setProperty(OutputKeys.METHOD, "xml");
properties.setProperty(OutputKeys.VERSION, "1.0");
properties.setProperty(OutputKeys.INDENT, "no");
transformer.setOutputProperties(properties);
return transformer;
} catch (TransformerConfigurationException tce) {
throw new RuntimeException(tce.getMessage());
}
}
/**
* 返回一段XML表述的錯誤信息。提示信息的TITLE為:係統錯誤。之所以使用字符串拚裝,主要是這樣做一般
* 不會有異常出現。
* @param errMsg 提示錯誤信息
* @return a XML String show err msg
*/
public static String errXMLString(String errMsg) {
StringBuffer msg = new StringBuffer(100);
msg.append("");
msg.append("
return msg.toString();
}
/**
* 返回一段XML表述的錯誤信息。提示信息的TITLE為:係統錯誤
* @param errMsg 提示錯誤信息
* @param errClass 拋出該錯誤的類,用於提取錯誤來源信息。
* @return a XML String show err msg
*/
public static String errXMLString(String errMsg, Class errClass) {
StringBuffer msg = new StringBuffer(100);
msg.append("");
msg.append(" + "\" errSource=\""
+ errClass.getName()
+ "\"/>");
return msg.toString();
}
/**
* 返回一段XML表述的錯誤信息。
* @param title 提示的title
* @param errMsg 提示錯誤信息
* @param errClass 拋出該錯誤的類,用於提取錯誤來源信息。
* @return a XML String show err msg
*/
public static String errXMLString(
String title,
String errMsg,
Class errClass) {
StringBuffer msg = new StringBuffer(100);
msg.append("");
msg.append(" + title
+ "\" errMsg=\""
+ errMsg
+ "\" errSource=\""
+ errClass.getName()
+ "\"/>");
return msg.toString();
}
以上都是DOM的基本應用,所以就不一一詳細說明了。
在實際使用過程中,有幾種狀況使用很頻繁,但是DOM的接口的設計卻使該操作很麻煩,所以分別添加了相應的處理方法。
其中最麻煩的要數獲取一個節點的Text子節點文本信息了,如下的XML節點:
text
在擁有element節點對象時,要獲取其中的文本信息"text",首先要獲取element節點的子節點列表,要判斷其是否存在子節點,如果存在,那麼遍曆其子節點找到一個TextNode節點,通過getNodeValue()方法來獲取該文本信息,由於這裏element節點沒有信息時沒有子節點,所以必須判斷element節點是否存在子節點才能去訪問真正包含了文本信息的TextNode節點,那麼如果要處理的數據都是以這種形式給出的,就會增加大量的開發代碼同時讓開發工作枯燥無味,因此這裏使用了一個默認的約定實現,就是,給出了一個公共方法,該方法取給定Node下的直接子節點的Text節點文本信息,如果不存在Text節點則返回null,這個約定雖然使該方法的使用有所限製,也可能導致錯誤使用該方法,但是,按實際使用的狀況來看,這樣的約定和使用方式是沒有問題的,因為實際用到的都是上麵舉的例子的狀況,代碼: