Работа с XML в Java: свободный XSD и не нужно разбирать - PullRequest
1 голос
/ 25 августа 2011

Кто-нибудь знает решение для работы с XML в Java, которое отвечает этим требованиям?

  • Возможность свободно определять XML-схему (без XSD)
  • Возможность работать с XMLданные через стандартные типы Java: если я скажу, что этот атрибут этого тега является целым числом, я хотел бы иметь возможность читать и записывать его как int, без разбора и преобразования его в строку вручную.

Идеальное решение таково:

class MyXmlData { 
  @Bind("...xpath here...", Bind.Required)
  public Integer numberOfPersons; // required, integer

  @Bind("...xpath here...")
  public String title; // optional 
}

try { // throws, if required fields are not present
  MyXmlData data = MagicXml.read(MyXmlData.class, "1.xml");

  // at this point data.numberOfPersons is never null and
  // title may be null

  int myNumOfPersons = data.numberOfPersons; // here we go
}

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Проверьте EclipseLink JAXB (MOXy) .Наша аннотация @XmlPath аналогична аннотации @Bind, которую вы ищете:

package blog.geocode;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="kml")
@XmlType(propOrder={"country", "state", "city", "street", "postalCode"})
public class Address {

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()")
    private String street;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:LocalityName/text()")
    private String city;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()")
    private String state;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()")
    private String country;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()")
    private String postalCode;

}

Для получения дополнительной информации

1 голос
/ 25 августа 2011

Есть несколько библиотек, например JAXB, JiBX и так далее. Смотри http://jvalentino.blogspot.com/2008/06/easiest-java-xml-binding.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...