正在尋找在普通的Java代碼,我們可以HashMap中轉換爲XML和XML使用任何外部庫HashMap來XML語法
任何信息或一些光,將有助於HashMap的
<key1>value1</key1>
<key2>value2</key2>
跟了出去。謝謝
正在尋找在普通的Java代碼,我們可以HashMap中轉換爲XML和XML使用任何外部庫HashMap來XML語法
任何信息或一些光,將有助於HashMap的
<key1>value1</key1>
<key2>value2</key2>
跟了出去。謝謝
下面是一個示例代碼,其中我使用Pattern
和Matcher
來查找xml字符串中的鍵和值。
這裏是online demo爲正則表達式模式。
這裏是正則表達式模式的更好的畫面
<([^>]+)>([^<]*)<\/\1>
我已經使用括號(...)
用於分組和\1
被用於第一個匹配的組的反向引用。
示例代碼:
String xml = "<key1>value1</key1><key2>value2</key2>";
// ------------------------- XML to Map -----------
Map<String, String> map = new LinkedHashMap<String, String>();
Pattern p = Pattern.compile("<([^>]+)>([^<]*)</\\1>");
Matcher m = p.matcher(xml);
while (m.find()) {
map.put(m.group(1), m.group(2));
}
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// ------------------------- Map to XML -----------
StringBuffer buffer = new StringBuffer();
for (Map.Entry<String, String> entry : map.entrySet()) {
buffer.append("<").append(entry.getKey()).append(">");
buffer.append(entry.getValue());
buffer.append("</").append(entry.getKey()).append(">");
}
System.out.println(buffer);
輸出:
key1:value1
key2:value2
<key1>value1</key1><key2>value2</key2>
下面是一個使用DOM parser
API將XML轉換成地圖好辦法。在Oracle教程中更好地解釋了Reading XML Data into a DOM以及許多很好的示例。
注意:我已經添加了一個根節點,以使其格式良好的xml字符串。
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
String xml = "<root><key1>value1</key1><key2>value2</key2></root>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(xml.getBytes()));
Map<String, String> map = new LinkedHashMap<String, String>();
NodeList nodeList = doc.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
map.put(nodeList.item(i).getNodeName(), nodeList.item(i).getChildNodes().item(0)
.getNodeValue());
}
對於書面
FileWriter fw = new FileWriter(fileName,false);
BufferedWriter buffWriter = new BufferedWriter(fw);
for (Map.Entry<String, Object> entry : map.entrySet()) {
buffWriter.write("<" + entry.getKey() + ">");
buffWriter.write(entry.getValue());
buffWriter.write("</" + entry.getKey() + ">");
buffWriter.newLine();
// ...
}
buffWriter.flush();
buffWriter.close();
你爲什麼不使用像XStream的一個非常適合的庫? – Kostronor 2014-09-12 17:57:26
這不是XML - 它需要一個單一的根級元素才能形成良性。你也確定你的所有密鑰都是合法的xml元素名稱(沒有空格,沒有非法的標點符號,沒有一個以數字開頭,等等)?一個更安全的表示將是' value1 ' –
2014-09-12 18:27:33