我正在寻找解析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());
}
}
}
您的网络设置是否使用相同的罐子? – 2014-09-27 23:59:25
来自XML解析我正在使用JAVAX类。我不需要特殊的罐子做 – sdakram 2014-09-29 04:34:20