У меня есть xml, содержащий журнал 1000 событий, у каждого из которых есть ключ. Моя цель - когда пользователь ищет ключ события, я должен отобразить ему xml узла события, имеющего этот ключ, и подготовить информацию о предыдущем и следующий брат.
Структура xml выглядит следующим образом:
<LOG>
<EVENT_SET>
<DOCGET system="T610_00" fingerPrint="NO_SIGNATURE">
<event>
<key>382</key>
<date>2015-01-28T09:15:15.350+0000</date>
<service>CORE</service>
<class>APPLICATION</class>
</event>
<document>
<docuri>getdocs:///DocMapCSDOCS.dPortal/1</docuri>
<sign_info>
<signature>VqtR9Gpny/MPE43/5o4hJXp8bR7gbsVUJqHlTI+VfztMSQecTpZwAQpxmorrdBJKvmn+h7eZzV1geVodkVECvOjQMRmRbnpT6mrpbiXxjDOsZsQRDNemTYUKETrQFIBRtXcjoP61une1LOsS5C749ehwbZ1jEaNH6fPjH4n+OH4=</signature>
</sign_info>
</document>
</DOCGET>
<DOCGET system="T610_00" fingerPrint="NO_SIGNATURE">
<event>
<key>383</key>
<date>2015-01-28T09:15:18.310+0000</date>
<service>CORE</service>
<class>APPLICATION</class>
</event>
<document>
<docuri>getdocs:///DocMapCSDOCS.dPortal/2</docuri>
<sign_info>
<signature>VqtR9Gpny/MPE43/5o4hJXp8bR7gbsVUJqHlTI+VfztMSQecTpZwAQpxmorrdBJKvmn+h7eZzV1geVodkVECvOjQMRmRbnpT6mrpbiXxjDOsZsQRDNemTYUKETrQFIBRtXcjoP61une1LOsS5C749ehwbZ1jEaNH6fPjH4n+OH4=</signature>
</sign_info>
</document>
</DOCGET>
.......
</EVENT_SET>
</LOG>
И мой код до сих пор, чтобы получить узел ключа:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
//parsing the xml file
journaldoc = builder.parse(journalFile);
XPathFactory xpathfactory = XPathFactory.newInstance();
XPath xpath = xpathfactory.newXPath();
//xpath to search for the event having the key requated by the user
String sXpath = "//DOCGET[event/key='"+eventkey+"']";
XPathExpression expr = xpath.compile(sXpath);
Object result = expr.evaluate(journaldoc, XPathConstants.NODE);
Node eventnode = (Node) result;
//return to the user the xml part with root DOCGET, and having the key requested
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Node copyNode = document.importNode(eventNode, true);
document.appendChild(copyNode);
DOMImplementationLS domImplementationLS = (DOMImplementationLS) document.getImplementation();
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
String xmlNode = lsSerializer.writeToString(document);
Теперь мне нужно получить предыдущего и следующего брата этого узла и получить их ключи, чтобы сохранить их в HashMap.
Проблема в том, что при выполнении eventnode.getPreviousSibling и eventnode.getNextSibling я получаю поврежденную информацию и не могу получить ключ этих событий.
У кого-нибудь есть лучшая идея сделать это?
Спасибо, Карин