2011-11-11 9 views
0

monitorUrl-- http://host03:8810/solr/admin/stats.jspこのxmlファイルが含まれています。.jsp形式のxmlからコンテンツを抽出します。

<?xml-stylesheet type="text/xsl" href="stats.xsl"?> 
<solr> 

     <core></core> 

    <schema>test</schema> 
    <host>domain.host.com</host> 
    <now>Fri Nov 11 11:14:01 PST 2011</now> 
    <start>Thu Sep 22 18:33:06 PDT 2011</start> 
    <solr-info> 

    <CORE> 

    <entry> 
     <name> 
     core 
     </name> 
     <class> 

     </class> 
     <version> 
     1.0 
     </version> 
     <description> 
     SolrCore 
     </description> 
     <stats> 

     <stat name="coreName" > 

     </stat> 

     <stat name="startTime" > 
      Thu Sep 22 18:33:06 PDT 2011 
     </stat> 

     <stat name="refCount" > 
      2 
     </stat> 

     <stat name="aliases" > 
      [] 
     </stat> 

     </stats> 
    </entry> 


    <entry> 
     <name> 
     searcher 
     </name> 
     <class> 
     org.apache.solr.search.SolrIndexSearcher 
     </class> 
     <version> 
     1.0 
     </version> 
     <description> 
     index searcher 
     </description> 
     <stats> 

     <stat name="searcherName" > 
      [email protected] main 
     </stat> 

     <stat name="caching" > 
      true 
     </stat> 

     <stat name="numDocs" > 
      111959 
     </stat> 

     <stat name="maxDoc" > 
      112310 
     </stat> 

     <stat name="reader" > 
      DirectoryReader(segments_h0 _1zn:Cv101710/351 _1zl:Cv8026 _1zp:Cv2574) 
     </stat> 

     <stat name="readerDir" > 
      [email protected]/es_idx_prd/projects/index/solr-agile/document/data/index [email protected] 
     </stat> 

     <stat name="indexVersion" > 
      1313979005459 
     </stat> 

     <stat name="openedAt" > 
      Fri Nov 11 11:00:04 PST 2011 
     </stat> 

     <stat name="registeredAt" > 
      Fri Nov 11 11:00:04 PST 2011 
     </stat> 

     <stat name="warmupTime" > 
      0 
     </stat> 

     </stats> 
    </entry> 

    </solr-info> 
</solr> 

そして、私は上記のXMLからnumDocs値を抽出するには、111959-- を意味し、以下のfetchlog方法は、単にそのJSPファイルの各行を読んでいます。では、numDocsの値を1行ずつ読み込んで直接取得することで、numDocsの値を取得する方法を教えてください。

monitorUrlは、xml形式の.jspファイルです。 XML /テキスト構造が同じであることを行っている場合は、私のコメントをフォローアップするために

import java.io.IOException; 
import org.w3c.dom.*; 
import org.xml.sax.SAXException; 
import javax.xml.parsers.*; 
import javax.xml.xpath.*; 

public class XPathExample { 

    public static void main(String[] args) 
    throws ParserConfigurationException, SAXException, 
      IOException, XPathExpressionException { 

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
    domFactory.setNamespaceAware(true); // never forget this! 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse("books.xml"); 

    XPathFactory factory = XPathFactory.newInstance(); 
    XPath xpath = factory.newXPath(); 
    XPathExpression expr 
    = xpath.compile("//numDocs"); 

    Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    NodeList nodes = (NodeList) result; 
    for (int i = 0; i < nodes.getLength(); i++) { 
     System.out.println(nodes.item(i).getNodeValue()); 
    } 
    } 
} 

http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

+0

.jspに有効なXMLがある場合は、それを解析してXPathを使用して目的のeの値を取得することができます礼儀。 – srkavin

+0

どうすればいいですか?私のコードに基づいてすべての例が評価されます.. !! – ferhan

+0

ここに投稿したXMLは有効ではありません。 Webブラウザ(最初の行がコメントアウトされている)で開き、失敗した場所を確認することができます。 – srkavin

答えて

1

:あなたはDOM4J(または任意のXML)とXPathを使用することができます

public void fetchlog() { 
     InputStream is = null; 
     FileOutputStream fos = null; 
     try { 
      is = HttpUtil.getFile(monitorUrl); 
      BufferedReader in = 
       new BufferedReader (new InputStreamReader (is)); 
      String line; 
      while ((line = in.readLine()) != null) { 
       if(line.contains("numDocs")) { 
      //Extract numDocs value- How to do this?   
       } 
       System.out.println(line); 
      } 

      fos = new FileOutputStream(buildTargetPath()); 
      IOUtils.copy(is, fos); 
     } catch (FileNotFoundException e) { 
      log.error("File Exception in fetching monitor logs :" + e); 
     } catch (IOException e) { 
      log.error("Exception in fetching monitor logs :" + e); 
     } 
    } 
1

if(line.contains("numDocs")) { 
    //Extract numDocs value- How to do this? 
    String numDocs = in.readLine(); // May need trimming. 
    System.out.println("Num docs:" + numDocs); 
} 
関連する問題