我必须使用java编写一个XML文件。内容应该从 map 写入。 map 包含项目作为键,其市场份额作为值。我需要构建一个带有两个标签的XML文件。我将使用这个使用 amcharts XML 构建饼图。任何人都可以帮助处理现有代码吗?
<xml>
<pie>
<slice title="<Map key1>"><Map Value1></slice>
<slice title="<Map key2>"><Map Value2></slice>
<slice title="<Map key1>"><Map Value3></slice>
.
.
.
<slice title="<Map keyn>"><Map Valuen></slice>
</pie>
最佳答案
使用标准 API 有多种方法可以实现此目的。 (插入您自己关于冗长和工厂模式的警告。)
您可以使用XMLStreamWriter对数据进行编码:
XMLOutputFactory factory = XMLOutputFactory
.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(
stream, "UTF-8");
try {
writer.writeStartDocument("UTF-8", "1.0");
writer.writeStartElement("pie");
for (Entry<String, String> entry : map.entrySet()) {
writer.writeStartElement("slice");
writer.writeAttribute("title", entry.getKey());
writer.writeCharacters(entry.getValue());
writer.writeEndElement();
}
writer.writeEndElement();
writer.writeEndDocument();
} finally {
writer.close();
}
或者,您可以构建 DOM document (不推荐)并发出它,或使用 JAXB绑定(bind)到编码/解码数据 ( tutorial )。
带注释的 JAXB 对象示例:
@XmlRootElement(name = "pie")
public class Pie {
@XmlElement(name = "slice")
public List<Slice> slices = new ArrayList<Slice>();
public Pie() {
}
public Pie(Map<String, String> sliceMap) {
for (Map.Entry<String, String> entry : sliceMap
.entrySet()) {
Slice slice = new Slice();
slice.title = entry.getKey();
slice.value = entry.getValue();
slices.add(slice);
}
}
static class Slice {
@XmlAttribute
public String title;
@XmlValue
public String value;
}
}
测试代码:
Map<String, String> slices = new HashMap<String, String>();
slices.put("Title 1", "100");
slices.put("Title 2", "200");
Pie pie = new Pie(slices);
JAXB.marshal(pie, System.out);
有许多第三方 API 可以完成相同的工作,并且已经提到了各种模板选项。
关于java - 使用 Java 的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075070/