Java tutorial
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; } } }