2014-09-27 28 views
0

我正在寻找解析XML,借助xpath表达式我想引入节点名称为AuditRecord的所有节点值。令人惊讶的是,我可以在独立应用程序中执行此操作,但在应用程序中相同的代码失败。我甚至没有更改XML。我在独立应用程序和Web应用程序中使用相同的XML文件,我可以在独立应用程序中看到结果,但当我在Web应用程序中尝试同样的操作时,我得到了0个节点列表大小。为Web应用程序一般都不允许直接访问文件系统/test.xml:XPath独立工作,但在放入网络应用程序时无效

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.sql.Timestamp; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathExpressionException; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 


public class TestXmlNode { 
private static final String TEST_XML = "C:/test.xml"; 
public static void main(String[] args) throws ParseException { 
    try { 
     //XPath xPath = XPathFactory.newInstance().newXPath(); 
     /*System.out.println("*************************"); 
     String expression = "//AuditRecord/DateTimeStamp";; 
     System.out.println("*************************"); 
     System.out.println(expression); 
     NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument,  XPathConstants.NODESET); 
     System.out.println("Nodelist size"+nodeList.getLength()); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      String date = nodeList.item(i).getFirstChild().getNodeValue(); 
      System.out.println("Date after split  "+date.split("T")[0]); 
      Date thedate = convertStringToDate(date); 
      Date todate = convertStringToDate("2014-01-01"); 
      System.out.println("XML todate"+todate.toString()); 
     if(thedate.after(todate)) 
      System.out.println("-------------------------->"+ thedate.toString()); 
     }*/ 
     FileInputStream file = new FileInputStream(new File(TEST_XML)); 
     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
     org.w3c.dom.Document xmlDocument = builder.parse(file); 
     XPathFactory xPathFactory = XPathFactory.newInstance(); 
     XPath xpath = xPathFactory.newXPath(); 
     XPathExpression xPathExpr = xpath.compile("//AuditRecord/DateTimeStamp/text()"); 
     Object result = xPathExpr.evaluate(xmlDocument, XPathConstants.NODESET); 
     print(result); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (XPathExpressionException e) { 
     e.printStackTrace(); 
    }  
} 
public static void print(Object result){ 
NodeList nodes = (NodeList) result; 
for (int i = 0; i < nodes.getLength(); i++) { 
    System.out.println(i+" "+nodes.item(i).getNodeValue()); 
} 
} 

} 
+0

您的网络设置是否使用相同的罐子? – 2014-09-27 23:59:25

+0

来自XML解析我正在使用JAVAX类。我不需要特殊的罐子做 – sdakram 2014-09-29 04:34:20

回答

0

你的web应用程序可能没有访问到C。

+0

我应该得到文件未找到异常,更多的是我已经将XML内容转换为字符串来查看XML的内容。我也可以看到内容 – sdakram 2014-09-29 04:35:55

+0

不一定。尝试为Exception添加catch块以查看发生了什么。 – 2014-09-29 05:07:35

+0

它没有进入异常块 – sdakram 2014-09-29 08:48:51

0

类路径中xmlparserv-2.0.jar的存在是问题,它不允许应用xpath表达式。任何想法如何移动

+0

由于默认的namesapce没有前缀,所以问题出在命名空间前缀,因为它没有应用xpath过滤器。 – sdakram 2014-10-13 11:53:23

相关问题