App下載
首頁(yè)javajaxbJava HTML/XML - 如何將CSV格式綁定為XML元素中的文本節(jié)點(diǎn)

Java HTML/XML - 如何將CSV格式綁定為XML元素中的文本節(jié)點(diǎn)

我們想知道如何將CSV格式綁定為XML元素中的文本節(jié)點(diǎn)。
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

public class Main {
  public static void main(String[] args) throws Exception {
    JAXBContext jc = JAXBContext.newInstance(Root.class);
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    File xml = new File("input.xml");
    Root root = (Root) unmarshaller.unmarshal(xml);

    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(root, System.out);
  }

  @XmlRootElement
  public static class Root {

    private int[][] matrix;

    @XmlJavaTypeAdapter(MatrixAdapter.class)
    public int[][] getMatrix() {
      return matrix;
    }

    public void setMatrix(int[][] matrix) {
      this.matrix = matrix;
    }
  }
  public static class MatrixAdapter extends
      XmlAdapter<MatrixAdapter.AdaptedMatrix, int[][]> {
    public static class AdaptedMatrix {
      @XmlElement(name = "row")
      public List<AdaptedRow> rows;
    }
    public static class AdaptedRow {
      @XmlValue
      public int[] row;
    }

    @Override
    public AdaptedMatrix marshal(int[][] matrix) throws Exception {
      AdaptedMatrix adaptedMatrix = new AdaptedMatrix();
      adaptedMatrix.rows = new ArrayList<AdaptedRow>(matrix.length);
      for (int[] row : matrix) {
        AdaptedRow adaptedRow = new AdaptedRow();
        adaptedRow.row = row;
        adaptedMatrix.rows.add(adaptedRow);
      }
      return adaptedMatrix;
    }
    @Override
    public int[][] unmarshal(AdaptedMatrix adaptedMatrix) throws Exception {
      List<AdaptedRow> adaptedRows = adaptedMatrix.rows;
      int[][] matrix = new int[adaptedRows.size()][];
      for (int x = 0; x < adaptedRows.size(); x++) {
        matrix[x] = adaptedRows.get(x).row;
      }
      return matrix;
    }
  }
}