我編寫了一些代碼,用於從我的系統屬性中創建一個XML文件。它的工作原理是如何我想要它,但我真的(真的)不喜歡我如何結束只是使用5如果語句讓它工作,因爲我注意到沒有任何屬性超出4分隔子字串反正。 我更喜歡使用迭代器和某種hasNext()方法繼續追加到元素上,直到字符串結束,但我什麼都不能工作。 我無法找到一種方法將最新的標籤附加到循環中的最後一個標籤上/將值添加到元素的末尾。嘗試使用java中的迭代器構建XML文件
這是我目前作爲一個快速修復程序運行。
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("JAVA");
doc.appendChild(rootElement);
Iterator it = hm.entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry) it.next();
String keyString = (String)entry.getKey();
String val = (String)entry.getValue();
java.util.List<String> sa = Arrays.asList(keyString.split("\\."));
Iterator ait = sa.iterator();
Element tag = doc.createElement((String) ait.next());
rootElement.appendChild(tag);
Element tag2 = null;
Element tag3 = null;
Element tag4 = null;
Element tag5 = null;
while(ait.hasNext())
{
if(ait.hasNext())
{
tag2 = doc.createElement((String)ait.next());
tag.appendChild(tag2);
if(!ait.hasNext())
tag2.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag3=doc.createElement((String)ait.next());
tag2.appendChild(tag3);
if(!ait.hasNext())
tag3.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag4=doc.createElement((String)ait.next());
tag3.appendChild(tag4);
if(!ait.hasNext())
tag4.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag5=doc.createElement((String)ait.next());
tag5.appendChild(tag5);
if(!ait.hasNext())
tag5.appendChild(doc.createTextNode(val));
}
}
}
Transformer transformer = null;
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try
{
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("XMLtester"));
transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(source, result);
} catch (TransformerConfigurationException e)
{
e.printStackTrace();
} catch (TransformerException e)
{
e.printStackTrace();
}
catch(NullPointerException e)
{
System.out.println("ERROR: " + e.toString());
}
System.out.println("File saved!");
如果任何人有關於如何使這一點更靈活或優雅,以便在任何數量的分隔子ID欣賞它的採取任何想法。
你能提供例如輸入和輸出。謝謝。 – Adam