2014-03-28 32 views
2

的log4j.xml我validLog4jXML字符串這樣的XPath使用VTD-XML

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!DOCTYPE log4j:eventSet PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd" > 
<log4j:eventSet version="1.2" xmlns:log4j="http://jakarta.apache.org/log4j/" includesLocationInfo="true"> 
    <log4j:event logger="org.apache.axis2.deployment.ClusterBuilder" 
     timestamp="1395925603261" level="INFO" thread="localhost-startStop-1"> 
     <log4j:message> 
      <![CDATA[Clustering has been disabled]]> 
     </log4j:message> 
    </log4j:event> 
</log4j:eventSet> 

我嘗試運行這段代碼:

VTDGen doc = new VTDGen(); 
doc.setDoc(validLog4jXML.getBytes()); 
doc.parse(true); 
VTDNav vn = doc.getNav(); 
AutoPilot ap = new AutoPilot(vn); 
String xPath = "//log4j:event[(((@level=\"INFO\") or (@level=\"ERROR\")) and " 
      + "(@timestamp>\"1395842943674\")) and (@timestamp<\"1396015743674\")]"; 
ap.selectXPath(xPath); 

在最後一行我得到異常:

[ERROR] No URL found for prefix:log4j 
com.ximpleware.XPathParseException: No URL found for prefix:log4j 
    at com.ximpleware.xpath.CUP$parser$actions.CUP$parser$do_action(parser.java:752) 
    at com.ximpleware.xpath.parser.do_action(parser.java:434) 
    at java_cup.runtime.lr_parser.parse(lr_parser.java:570) 
    at com.ximpleware.AutoPilot.selectXPath(AutoPilot.java:809) 
    at ad.ecs.library.LogHelper.collectLogNodesVTD(LogHelper.java:654) 
    at ad.ecs.library.LogHelper.collectLogNodesForADayVTD(LogHelper.java:571) 
    at ad.ecs.library.LogHelper.collectLogNodesForTheWeekVTD(LogHelper.java:456) 
    at ad.ecs.library.LogHelper.access$2(LogHelper.java:453) 
    at ad.ecs.library.LogHelper$2.run(LogHelper.java:313) 
    at java.lang.Thread.run(Thread.java:724) 

我試着看看關於VTD-XML的文檔,它說:

爲了避免這種情況的例外:

com.ximpleware.XPathParseException:找不到網址前綴:XYZ

一定要創建一個支持命名空間的初始導航對象(即,與上param設置爲true),並傳入名稱空間散列作爲find-indexes,first-match,all-matches,get-xml和get-hash的最終參數。

我戳着試圖按照這些步驟,但沒有成功。我將不勝感激任何幫助。

回答

2

使用declareXPathNameSpace在查詢中使用它之前,必須先註冊了命名空間:

ap.declareXPathNameSpace(log4j, "http://jakarta.apache.org/log4j/"); 
+0

非常感謝你 - 爲我工作 – serge