尝试用java中的迭代器构建XML文件
我写了一些代码,用java从我的系统属性创建一个XML文件。它的工作方式正是我所希望的,但我真的(真的)不喜欢我最终使用like 5 if语句使它工作,因为我注意到没有任何属性超过4个分隔子字符串。 我更喜欢使用迭代器和某种hasNext()方法继续追加到元素上,直到字符串结束,但我什么都做不出来。 我找不到一种方法将最新的标记附加到循环中的最后一个标记上/将值添加到元素的末尾 这是我目前拥有的一个快速修复程序,可以让程序运行尝试用java中的迭代器构建XML文件,java,xml,Java,Xml,我写了一些代码,用java从我的系统属性创建一个XML文件。它的工作方式正是我所希望的,但我真的(真的)不喜欢我最终使用like 5 if语句使它工作,因为我注意到没有任何属性超过4个分隔子字符串。 我更喜欢使用迭代器和某种hasNext()方法继续追加到元素上,直到字符串结束,但我什么都做不出来。 我找不到一种方法将最新的标记附加到循环中的最后一个标记上/将值添加到元素的末尾 这是我目前拥有的一个快速修复程序,可以让程序运行 Document doc = docBuilder.newDocum
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!");
Document doc=docBuilder.newDocument();
Element rootElement=doc.createElement(“JAVA”);
doc.appendChild(rootElement);
迭代器it=hm.entrySet().Iterator();
while(it.hasNext())
{
Map.Entry=(Map.Entry)it.next();
String keyString=(String)entry.getKey();
String val=(String)entry.getValue();
java.util.List sa=Arrays.asList(keyString.split(“\\”);
迭代器ait=sa.Iterator();
元素标签=doc.createElement((字符串)ait.next());
appendChild(标记);
元素tag2=null;
元素tag3=null;
元素tag4=null;
元素tag5=null;
while(ait.hasNext())
{
if(ait.hasNext())
{
tag2=doc.createElement((字符串)ait.next());
tag.appendChild(tag2);
如果(!ait.hasNext())
tag2.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag3=doc.createElement((字符串)ait.next());
tag2.追加子项(tag3);
如果(!ait.hasNext())
tag3.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag4=doc.createElement((字符串)ait.next());
tag3.追加子项(tag4);
如果(!ait.hasNext())
tag4.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag5=doc.createElement((字符串)ait.next());
tag5.追加子项(tag5);
如果(!ait.hasNext())
tag5.appendChild(doc.createTextNode(val));
}
}
}
变压器=零;
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
尝试
{
DOMSource=新的DOMSource(doc);
StreamResult=新的StreamResult(新文件(“XMLtester”);
transformer=transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
transformer.setOutputProperty(“{http://xml.apache.org/xslt}缩进金额,“2”);
变换(源、结果);
}捕获(TransformerConfiguration异常e)
{
e、 printStackTrace();
}捕获(转换异常e)
{
e、 printStackTrace();
}
捕获(NullPointerException e)
{
System.out.println(“错误:+e.toString());
}
System.out.println(“文件已保存!”);
如果有人对如何使其更灵活或优雅一些,以便接受任意数量的分隔子字符串有任何想法,我将不胜感激 我想这就是你想要的
Element destination = rootElement;
Element tag = null;
while (ait.hasNext()) {
tag = doc.createElement((String) ait.next());
destination.appendChild(tag);
destination = tag;
}
destination.appendChild(doc.createTextNode(val));
示例输出:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<JAVA>
<java>
<runtime>
<name>Java(TM) SE Runtime Environment</name>
</runtime>
</java>
<sun>
<boot>
<library>
<path>/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib</path>
</library>
</boot>
</sun>
<java>
<vm>
<version>23.0-b19</version>
</vm>
</java>
<user>
<country>
<format>GB</format>
</country>
</user>
Java(TM)SE运行时环境
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib
23.0-b19
国标
完整工作示例:
import java.io.File;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class StackOverflow23556822 {
public static void main(String[] args) throws ParserConfigurationException,
TransformerException {
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("JAVA");
doc.appendChild(rootElement);
Iterator<?> it = System.getProperties().entrySet().iterator();
while (it.hasNext()) {
Map.Entry<?, ?> entry = (Map.Entry<?, ?>) it.next();
String keyString = (String) entry.getKey();
String val = (String) entry.getValue();
List<String> sa = Arrays.asList(keyString.split("\\."));
Iterator<?> ait = sa.iterator();
Element destination = rootElement;
Element tag = null;
while (ait.hasNext()) {
tag = doc.createElement((String) ait.next());
destination.appendChild(tag);
destination = tag;
}
destination.appendChild(doc.createTextNode(val));
}
Transformer transformer = null;
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("xml-test.xml"));
transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(source, result);
System.out.println("File saved!");
}
}
导入java.io.File;
导入java.util.array;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Map;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
公共类堆栈溢出23556822{
公共静态void main(字符串[]args)引发ParserConfiguration异常,
变换异常{
DocumentBuilder docBuilder=DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc=docBuilder.newDocument();
Element rootElement=doc.createElement(“JAVA”);
doc.appendChild(rootElement);
迭代器it=System.getProperties().entrySet().Iterator();
while(it.hasNext()){
Map.Entry=(Map.Entry)it.next();
String keyString=(String)entry.getKey();
String val=(String)entry.getValue();
List sa=Arrays.asList(keyString.split(“\\”);
迭代器ait=sa.Iterator();
元素目的地=根元素;
元素标记=null;
while(ait.hasNext()){
tag=doc.createElement((字符串)ait.next());
destination.appendChild(标签);
目的地=标签;
}
destination.appendChild(doc.createTextNode(val));
}
变压器=零;
TransformerFactory TransformerFactory=TransformerFactory
.newInstance();
DOMSource=新的DOMSource(doc);
StreamResult=newstreamresult(新文件(“xml test.xml”);
transformer=transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}缩进金额,“2”);
变换(源、结果);
System.out.printl