xml標籤自閉合會改變報文格式,在一些涉及加密的程序處理中,自閉合導致報文更改從而引起非實際內容篡改所導致的加解密不一致的情況。以下程序是將自閉和更改爲結束標籤
package com.parse.xml;
import java.io.StringWriter;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class FormatXml {
public static void fotmatXml(String xmlMsg) {
OutputFormat format=new OutputFormat();
format.setEncoding("UTF-8");
//關閉自閉合標籤
format.setExpandEmptyElements(true);
StringWriter strWtr=new StringWriter();
try {
XMLWriter xmlWrt=new XMLWriter(strWtr,format);
xmlWrt.write(DocumentHelper.parseText(xmlMsg));
xmlWrt.flush();
xmlWrt.close();
} catch (Exception e) {
e.printStackTrace();
}
//格式化,去掉換行
String formatXml = strWtr.toString().replaceAll("\r|\n", "");
System.out.println(formatXml);
}
public static void main(String[] args) {
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><note><name>張三</name><age/></note>";
String xml1="<note><name>張三</name><age/></note>";
fotmatXml(xml);
fotmatXml(xml1);
}
}
需要注意的是報文傳輸中一般是一個無換行的字符串,所以需要格式化去掉換行,
執行結果:
<?xml version="1.0" encoding="UTF-8"?><note><name>張三</name><age></age></note>
<?xml version="1.0" encoding="UTF-8"?><note><name>張三</name><age></age></note>
可以看到即使不聲明,結果會默認版本極編碼