您可以在JAXB中利用an
XMLStreamReader和an 来做到这一点
Unmarshaller.Listener:
演示版
package forum383861;import java.io.FileInputStream;import java.util.HashMap;import java.util.Map;import javax.xml.bind.JAXBContext;import javax.xml.bind.Unmarshaller;import javax.xml.bind.Unmarshaller.Listener;import javax.xml.stream.Location;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamReader;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Customer.class); XMLInputFactory xif = XMLInputFactory.newFactory(); FileInputStream xml = new FileInputStream("src/forum383861/input.xml"); XMLStreamReader xsr = xif.createXMLStreamReader(xml); Unmarshaller unmarshaller = jc.createUnmarshaller(); LocationListener ll = new LocationListener(xsr); unmarshaller.setListener(ll); Customer customer = (Customer) unmarshaller.unmarshal(xsr); System.out.println(ll.getLocation(customer)); System.out.println(ll.getLocation(customer.getAddress())); } private static class LocationListener extends Listener { private XMLStreamReader xsr; private Map<Object, Location> locations; public LocationListener(XMLStreamReader xsr) { this.xsr = xsr; this.locations = new HashMap<Object, Location>(); } @Override public void beforeUnmarshal(Object target, Object parent) { locations.put(target, xsr.getLocation()); } public Location getLocation(Object o) { return locations.get(o); } }}input.xml
<?xml version="1.0" encoding="UTF-8"?><customer> <address/></customer>
输出量
[row,col {unknown-source}]: [2,1][row,col {unknown-source}]: [3,5]顾客
package forum383861;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class Customer { private Address address; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; }}地址
package forum383861;public class Address {}想要查询更多的信息
- http://blog.bdoughan.com/2011/08/using-unmarshallerlistener-to-capture.html



