При разбиении огромного XML-файла я увидел очень хорошее решение с использованием Stax и Transformer.transform ().Хорошо, НО я вижу, что некоторые теги потеряны. Почему это так?
Файл XML с именем ... дает следующий результат.В случае СОБЫТИЯ тег элемента опускается.
Element: <?xml version="1.0" encoding="UTF-8"?><car><name>car1</name></car>
Element: <?xml version="1.0" encoding="UTF-8"?><name>car2</name>
Element: <?xml version="1.0" encoding="UTF-8"?><car><name>car3</name></car>
Element: <?xml version="1.0" encoding="UTF-8"?><name>car4</name>
Как получить нужные элементы?Связано ли это с тем, что transform (s, r) мешает чтению входного потока?
Это мой код (который я видел во многих местах, например этот ).Нет изменений при использовании StringReader или FileReader.
Я ожидал этого: loop {advance to start-tag;получить доступ к этому элементу} Что я вижу: 1-й: элемент + 2-й: части элемента + повторяется.
String testCars = "<root><car><name>car1</name></car><car><name>car2</name></car><car><name>car3</name></car><car><name>car4</name></car></root>";
String element = "car";
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = factory.createXMLStreamReader(new StringReader(testCars));
streamReader.nextTag();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
while(streamReader.nextTag() == XMLStreamConstants.START_ELEMENT) {
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
t.transform(new StAXSource(streamReader), result);
System.out.println("Element: " + writer.toString());
}
} catch (Exception e) { ... }