В моем случае синтаксический анализатор VTD-XML работал лучше, хотя мои документы cml не такие большие, некоторые примеры кода с использованием VTD-XML приведены ниже. Вы можете сослаться на ссылки ниже, которые объясняют, что анализатор VTD-XML лучше, чем анализаторы SAX, DOM и т. Д., Поскольку они также дают показатели производительности.
http://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XML
http://www.codeproject.com/Articles/24354/VTD-XML-XML-Processing-for-the-Future-Part-II
// Для чтения значений xpath
public String readXpathValue(String dir, String file, String xpath) {
String value = null;
try{
VTDGen vg = new VTDGen();
int i;
AutoPilot ap = new AutoPilot();
ap.selectXPath(xpath);
if (vg.parseFile(dir+file, true))
{
VTDNav vn = vg.getNav();
ap.bind(vn);
//XPath eval returns one node at a time
while ((i = ap.evalXPath()) != -1)
{
value = vn.toString(i);
}
// ap.resetXPath();
}
}
catch (Exception e){
System.out.println("Exception Occurred in reading Xpath Value : "+e);
}
return value;
}
// Для изменения XML-файла во время выполнения
public void formCreateXMLRequest(MAMData mamData,Map<String, String> strTobeModified) throws DatatypeConfigurationException, PayPalUserCreationFailedException, ModifyException, TranscodeException, IOException, XPathEvalException, NavException, XPathParseException
{
VTDGen vg = new VTDGen();
if (!vg.parseFile(mamData.getDirectory() + mamData.getBatchRequest(), true))
return;
VTDNav vn = vg.getNav();
XMLModifier xm = new XMLModifier(vn);
AutoPilot ap = new AutoPilot(vn);
Set<String> xpathkeys= strTobeModified.keySet();
for(String xpath : xpathkeys) {
ap.selectXPath(xpath);
while((ap.evalXPath()) != -1)
{
int p = vn.getText();
xm.updateToken(p, strTobeModified.get(xpath));
}
xm.output(mamData.getDirectory()+mamData.getBatchRequest());
}
}