Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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将格式化日期与xml中的当前日期进行比较_Java_Xml_Date_Xpath - Fatal编程技术网

java xpath将格式化日期与xml中的当前日期进行比较

java xpath将格式化日期与xml中的当前日期进行比较,java,xml,date,xpath,Java,Xml,Date,Xpath,我有这样的XML文件: <books> <book> <id>1</id> <validFrom>23.11.2012</validFrom> <validTo>26.09.2012</validTo> </book> <book> <id>2</id> <validFrom>14.09.2012<

我有这样的XML文件:

<books>
<book>
    <id>1</id>
    <validFrom>23.11.2012</validFrom>
    <validTo>26.09.2012</validTo>
</book>
<book>
    <id>2</id>
    <validFrom>14.09.2012</validFrom>
    <validTo>01.08.2012</validTo>
</book>

1.
23.11.2012
26.09.2012
2.
14.09.2012
01.08.2012

我想从这个xml文件中删除所有书籍,其中日期validTo早于当前日期,但我在XPath中的查询方面有问题

我试过不同的方法

XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xpath = xPathFactory.newXPath();
        XPathExpression expr 
         = xpath.compile("//book[validTo < fn:current-date()]");

Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
        removeFindNodes()
    }
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xPathFactory.newXPath();
XPathExpression
=xpath.compile(//book[validTo
如何设置有效日期的格式,以便与当前日期进行比较


感谢您的帮助

xsd:date
希望格式为
yyyy-MM-dd
,而您的格式为
dd.MM.yyyy
。您可以尝试结合使用
子字符串
翻译
、和
concat
来转换格式,但到那时,XPath表达式将变得稍微复杂。另一种更容易阅读的解决方案是将所有
有效节点提取到
节点,然后与Java进行比较:

XPathExpression expr = xpath.compile("//book/validTo");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;

DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);

for (int i = 0; i < nodes.getLength(); i++) {
  Node validToNode = nodes.item(i);
  Date validTo = df.parse(validToNode.getTextContent());
  if (validTo.compareTo(now.getTime()) < 0) {
    Node bookNode = validToNode.getParentNode();
    removeNode(bookNode);
  }
}
XPathExpression expr=xpath.compile(“//book/validTo”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
DateFormat df=新的SimpleDateFormat(“dd.MM.yyyy”);
Calendar now=Calendar.getInstance();
now.set(Calendar.HOUR\u OF_DAY,0);
现在。设置(Calendar.MINUTE,0);
现在。设置(日历秒,0);
now.set(Calendar.millis秒,0);
对于(int i=0;i