2

それぞれにキーがある 1000 イベントのログを含む xml があります。私の目的は、ユーザーがイベント キーを検索するときです。このキーを持つイベント ノードの 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 を実行するときに、破損した情報を取得していて、これらのイベントのキーを取得できないことです。

誰かがこれを行うためのより良いアイデアを持っていますか?

ありがとう、カリン

4

1 に答える 1