Рассмотрим следующий XML с данными размером 500 МБ.
<?xml version="1.0" encoding="UTF-8"?>
<Parents>
<process Child ="A">...</process>
<process Child="B">...</process>
<process Child="A">...</process>
<process Child="C">..</process>
<process Child=...
</process>
<\Parents>
Этот xml имеет несколько дочерних атрибутов с тегом «A» или «B» или другим. Я хочу создать отдельный XML для «A», «B», «C» или других, таких как expamle_A.xml, example_B.xml и т. д. Ниже кода создает отдельный xml для каждого дочернего атрибута, это означает, что если у нас есть 500 дочерних атрибутов, он создает 500 xml.
public static void main(String args[]) {
try {
VTDGen v = new VTDGen();
if (v.parseFile("C:\\..\\example.xml", true)) {
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/Parents/child");
int chunk = 0;
while (( ap.evalXPath()) != -1) {
long frag = vn.getElementFragment();
(new FileOutputStream("C:\\....\\result" + chunk + ".xml")).write(vn.getXML().getBytes(), (int) frag,
(int) (frag >> 32));
chunk++;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
Теперь дело в том, что я хочу разделить файл на основе дочернего атрибута одной и той же группы, например, все дочерние элементы «A» должны быть в файле example_A.xml таким же образом для B, C и другие.
vn.toRawString(VTDNav.TOKEN_ATTR_NAME)
, чтобы узнать текущее имя атрибута, и использовать true с потоком вывода файлов, чтобы не перезаписывать файл каждый раз. - person Sadiq Ali   schedule 20.07.2017