2012-11-20 21 views
-1

我有下面的格式的数据表:转换基于行的数据转换成XML

enter image description here

我需要进入下面的XML格式:

<People> 
    <Person> 
      <FirstName>Mark</FirstName> 
      <LastName>Smith</LastName> 
      <PhoneNumbers> 
       <PhoneNumber> 
        <Number>555-123-4567</Number> 
        <Type>Home</Type> 
       </PhoneNumber> 
       <PhoneNumber> 
        <Number>555-321-7654</Number> 
        <Type>Cell</Type> 
       </PhoneNumber> 
      <PhoneNumbers> 
    <Person> 
    <Person> 
      <FirstName>Tim</FirstName> 
      <LastName>Johnson</LastName> 
      <PhoneNumbers> 
       <PhoneNumber> 
        <Number>444-123-4567</Number> 
        <Type>Home</Type> 
       </PhoneNumber>     
      <PhoneNumbers> 
    <Person> 
    <Person> 
      <FirstName>Larry</FirstName> 
      <LastName>Walker</LastName> 
      <PhoneNumbers> 
       <PhoneNumber> 
        <Number>333-123-4567</Number> 
        <Type>Home</Type> 
       </PhoneNumber> 
       <PhoneNumber> 
        <Number>333-321-7654</Number> 
        <Type>Cell</Type> 
       </PhoneNumber> 
      <PhoneNumbers> 
    <Person> 

我想发现做到这一点的最佳做法。不幸的是,当我强制逐一读取表格中的行时,我的手与我的手绑在一起。

回答

1

您可以使用JAXB。假设你知道如何分析你的表:

@XmlRootElement(name="People") 
@XmlAccessorType(XmlAccessType.FIELD) 
class People { 
    @XmlElement(name = "Person") 
    private List<Person> persons = new ArrayList<Person>(); 

    public void addPerson(Person person) { 
     persons.add(person); 
    } 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
class Person { 
    String FirstName; 
    List<PhoneNumber> PhoneNumber; 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
class PhoneNumber { 
    String Number; 
    String Type; 
} 

public class Test { 

    public static void main(String args[]) throws Exception { 
     PhoneNumber phoneNumber = new PhoneNumber(); 
     phoneNumber.Number = "555-555-555"; 
     phoneNumber.Type = "Home"; 

     Person person = new Person(); 
     person.FirstName = "Peter"; 
     person.PhoneNumber = Arrays.asList(phoneNumber, phoneNumber); 

     People people = new People(); 
     people.addPerson(person); 
     people.addPerson(person); 

     StringWriter s = new StringWriter(); 
     JAXB.marshal(people, s); 

     System.out.println(s); 
    } 
} 

注意,代码需要reactoring更好看