Sie es tun können, aber Sie müssen einige Kesselblech Code schreiben. Sie müssen eine Instanz von XMLStreamReader
erstellen, um das benutzerdefinierte Lesen Ihrer XML-Eingabe vornehmen zu können. Die Methode next()
ermöglicht es, zum nächsten Analyseereignis des Lesers zu gehen. Es ist eher eine knifflige Methode() in Bezug auf die internen Regeln des Lesers. So lesen Sie die Dokumentation zu verstehen Besonderheiten:
Vom Javadoc:
int javax.xml.stream.XMLStreamReader.next() throws XMLStreamException
nächste Parsing Ereignis Get - ein Prozessor kann alle Rück zusammenhängende Zeichendaten in einem einzelnen Chunk, oder es kann in mehrere Chunks aufgeteilt werden. Wenn die Eigenschaft javax.xml.stream.isCoalescing auf "true" gesetzt ist, muss der Inhalt des Elements zusammengeführt werden und für zusammenhängende Elementinhalte oder CDATA-Abschnitte muss nur ein CHARACTERS-Ereignis zurückgegeben werden. Durch Standard-Entity-Referenzen müssen erweitert und transparent an die Anwendung gemeldet werden. Eine Ausnahme wird ausgelöst, wenn eine Entitätsreferenz nicht erweitert werden kann. Wenn der Inhalt des Elements leer ist (d. H. Der Inhalt ist ""), wird kein CHARACTERS-Ereignis gemeldet.
Angesichts der folgenden XML: Inhalt textHello </gruss>]]> andere Inhalte Das Verhalten des nächsten() aufrufen, wenn sie auf foo sein wird: 1- Kommentar (KOMMENTAR) 2- dann der Abschnitt Zeichen (Characters) 3- dann der CDATA-Abschnitt (ein anderes Zeichen) 4- dann der nächsten Zeichen Abschnitt (ein anderes Zeichen) 5- dann die END_ELEMENT
HINWEIS: leeres Element (wie zum Beispiel) wird mit zwei separaten gemeldet Ereignisse: START_ELEMENT, END_ELEMENT - Dadurch wird das Parsen Äquivalenz des leeren Elements zu. Diese Methode löst eine IllegalStateException aus, wenn sie aufgerufen wird, nachdem hasNext() false zurückgegeben hat.
Returns: der Code integer dem aktuellen Parse-Ereignis
Lassen Sie mich erläutern die Art und Weise entspricht, mit einem Gerät zu testen, um fortzufahren:
@Test
public void mapXmlToPojo() throws Exception {
XMLInputFactory factory = XMLInputFactory2.newFactory();
InputStream inputFile = MapXmlToPojo.class.getResourceAsStream("pojo.xml");
XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(inputFile);
XmlMapper xmlMapper = new XmlMapper();
xmlStreamReader.next();
xmlStreamReader.next();
Pojo pojo = xmlMapper.readValue(xmlStreamReader, Pojo.class);
Assert.assertEquals("test", pojo.getName());
}