Я довольно новичок в Stax, в настоящее время пытаюсь прочитать большой XML-файл, содержащий продукты, и буду записывать разные файлы продуктов в разные каталоги с помощью атрибута matnr
, в настоящее время я действительно могу написать много документов, но я должен обогатить свой содержимое со статическими полями моего файла XML, содержимое моего файла:
<?xml version="1.0" encoding="UTF-8" ?>
<CMD>
<DOCUMENT_NUMBER>0363244</DOCUMENT_NUMBER>
<CREATE_TIME>20181106T125340</CREATE_TIME>
<PRODUCT matnr="material1" change_type="I">
<TABLE name="table1">
...
</TABLE>
<TABLE name="table2">
....
</TABLE>
</PRODUCT>
<PRODUCT matnr="material2" change_type="I">
<TABLE name="table1">
...
</TABLE>
<TABLE name="table2">
....
</TABLE>
</PRODUCT>
</CMD>
Мой код для записи файлов:
import java.io.File;
import java.io.FileReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static String elementString = "";
public static String staticString = "";
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("input.xml"));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
while(xsr.hasNext()) {
int parseEvent = xsr.next();
if (parseEvent == XMLStreamConstants.START_ELEMENT && "PRODUCT".equals(xsr.getLocalName())) {
File file = new File("/xslt/templates/cmd-input-split/" + xsr.getAttributeValue(null, "matnr") + ".xml");
//System.out.println(cmdStr + staticString + new StAXSource(xsr) + cmdEndStr);
t.transform(new StAXSource(xsr), new StreamResult(file));
}
}
}
В настоящее время записанные файлы начинаются с элемента similiar ниже
<?xml version="1.0" encoding="UTF-8" ?>
<PRODUCT matnr="material1" change_type="I">
<TABLE name="table1">
...
</TABLE>
<TABLE name="table2">
....
</TABLE>
</PRODUCT>
но мне нужно добавить некоторые элементы, которые существуют на входе, я должен прочитать два статических элемента файла с именами CREATE_TIME и DOCUMENT_NUMBER и добавить эти значения к каждому файлу, созданному с помощью преобразователя, в конце я хочу два файла из данного xml, как это:
material1.xml
<CMD>
<DOCUMENT_NUMBER>0363244</DOCUMENT_NUMBER>
<CREATE_TIME>20181106T125340</CREATE_TIME>
<PRODUCT matnr="material1" change_type="I">
<TABLE name="table1">
...
</TABLE>
<TABLE name="table2">
....
</TABLE>
</PRODUCT>
</CMD>
material2.xml
<CMD>
<DOCUMENT_NUMBER>0363244</DOCUMENT_NUMBER>
<CREATE_TIME>20181106T125340</CREATE_TIME>
<PRODUCT matnr="material2" change_type="I">
<TABLE name="table1">
...
</TABLE>
<TABLE name="table2">
....
</TABLE>
</PRODUCT>
</CMD>
Как я могу достичь своей цели, отредактировав реализацию, может кто-нибудь поддержать?