Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath可以独立工作,但放在web应用程序中不起作用_Java_Xml_Xpath_Expression - Fatal编程技术网

Java XPath可以独立工作,但放在web应用程序中不起作用

Java XPath可以独立工作,但放在web应用程序中不起作用,java,xml,xpath,expression,Java,Xml,Xpath,Expression,我希望解析XML,在xpath表达式的帮助下,我希望引入节点名为AuditRecord的所有节点值。令人惊讶的是,我可以在一个独立的应用程序中这样做,但同样的代码在应用程序中失败。我甚至没有更改XML。我在独立应用程序和web应用程序中使用相同的XML文件,我可以在独立应用程序中看到结果,但在web应用程序中尝试相同的操作时,我得到的节点列表大小为0 import java.io.File; import java.io.FileInputStream; import java.io.FileN

我希望解析XML,在xpath表达式的帮助下,我希望引入节点名为AuditRecord的所有节点值。令人惊讶的是,我可以在一个独立的应用程序中这样做,但同样的代码在应用程序中失败。我甚至没有更改XML。我在独立应用程序和web应用程序中使用相同的XML文件,我可以在独立应用程序中看到结果,但在web应用程序中尝试相同的操作时,我得到的节点列表大小为0

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());
}
}

}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.sql.Timestamp;
导入java.text.DateFormat;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.Locale;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公共类TestXmlNode{
私有静态最终字符串测试\u XML=“C:/TEST.XML”;
公共静态void main(字符串[]args)引发异常{
试一试{
//XPath=XPathFactory.newInstance().newXPath();
/*System.out.println(“****************************”);
字符串表达式=“//AuditRecord/DateTimeStamp”;;
System.out.println(“****************************”);
System.out.println(表达式);
NodeList NodeList=(NodeList)xPath.compile(expression.evaluate(xmlDocument,XPathConstants.NODESET);
System.out.println(“节点列表大小”+Nodelist.getLength());
for(int i=0;i”+thedate.toString());
}*/
FileInputStream file=newfileinputstream(新文件(TEST_XML));
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder=builderFactory.newDocumentBuilder();
org.w3c.dom.Document xmlDocument=builder.parse(文件);
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xPathFactory.newXPath();
XPathExpression xPathExpr=xpath.compile(“//AuditRecord/DateTimeStamp/text()”;
Object result=xpathxpr.evaluate(xmlDocument,XPathConstants.NODESET);
打印(结果);
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(XPathExpressionException e){
e、 printStackTrace();
}       
}   
公共静态无效打印(对象结果){
节点列表节点=(节点列表)结果;
对于(int i=0;i
您的web应用可能无法访问C:/test.xml,因为web应用通常不允许直接访问文件系统。

类路径中存在xmlparserv-2.0.jar问题,这不允许应用xpath表达式。关于如何继续

您的web设置是否使用相同的JAR?对于XML解析,我使用的是JAVAX类。我不需要特殊的JAR来做我应该得到的文件找不到异常,更何况我已经将XML内容转换为字符串来查看XML的内容。我也能看到内容,不一定。尝试为异常添加捕获块以查看发生的情况。它没有输入异常块问题在于名称空间前缀,因为默认名称空间没有前缀,这是它不应用xpath筛选器的原因之一。