java - 使用 Java 的 XML

标签 java xml

我必须使用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/

相关文章:

java - 我如何从下拉列表中添加元素然后获取每个元素的文本

java - 有没有办法简化我的代码?

java - CPLEX 收入最大化

javascript - 跨源请求仅支持协议(protocol)方案 : http, data、chrome、chrome-extension、https

c# - 如何删除 xmlns :xsd attribute but keep xmlns:xsi

javascript - 在 Javascript 中获取复杂命名空间下的数据

java - 查找符合其中一项条件的对象

java - 尽管链接和验证成功,为什么着色器程序无法编译?

java - 如何使用 SAX Java 解析器读取评论文本

java - 使用 XML 格式化日期