Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
XPATH-获取距离当前日期不到1年的所有xml节点_Xml_Xpath_Php - Fatal编程技术网

XPATH-获取距离当前日期不到1年的所有xml节点

XPATH-获取距离当前日期不到1年的所有xml节点,xml,xpath,php,Xml,Xpath,Php,我有一个XML文件,看起来像: <product product_id="144446"> <name>NAMEOFPRODUCT</name> <date>2020-05-19 00:00:00</date> </product> 它检索2019年以来的所有产品,但我需要更改字符串“2019”以使用动态函数进行更改 谢谢这个XPath+变量: $date = date("Y")

我有一个XML文件,看起来像:

<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2020-05-19 00:00:00</date>
</product>
它检索2019年以来的所有产品,但我需要更改字符串“2019”以使用动态函数进行更改

谢谢这个XPath+变量:

$date = date("Y") -1;
$xpath = '//product[substring(./date, 1, 4) > ' . $date . ']';
# then doSomethingWithXpath($xpath);
此XPath+变量:

$date = date("Y") -1;
$xpath = '//product[substring(./date, 1, 4) > ' . $date . ']';
# then doSomethingWithXpath($xpath);

XPath 2.0表达式选择日期为实际年份-1的产品

//product[date[number(substring(.,1,4))>=number(concat(year-from-date(current-date())-1,""))]]
如果您需要年、月和日期精度:

//product[date[number(replace(substring(.,1,10),"-",""))>=number(replace(substring(concat(current-date(),""),1,10),"-",""))-10000]]
样本:

<root>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2020-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2018-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2017-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2019-06-20 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2019-11-19 00:00:00</date>
</product>
</root>
第二个XPath将输出2个节点:

NAMEOFPRODUCT 2020-05-19 00:00:00
NAMEOFPRODUCT 2019-11-19 00:00:00 

XPath 2.0表达式选择日期为实际年份-1的产品

//product[date[number(substring(.,1,4))>=number(concat(year-from-date(current-date())-1,""))]]
如果您需要年、月和日期精度:

//product[date[number(replace(substring(.,1,10),"-",""))>=number(replace(substring(concat(current-date(),""),1,10),"-",""))-10000]]
样本:

<root>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2020-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2018-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2017-05-19 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2019-06-20 00:00:00</date>
</product>
<product product_id="144446">
 <name>NAMEOFPRODUCT</name>
 <date>2019-11-19 00:00:00</date>
</product>
</root>
第二个XPath将输出2个节点:

NAMEOFPRODUCT 2020-05-19 00:00:00
NAMEOFPRODUCT 2019-11-19 00:00:00 

正如我所说,我不想写字符串“2019”,我想要的是:current_date-1我使用需要XPath命令的wordpress插件。我想是PHP!很抱歉,我用逻辑完成了第一个任务,但我不知道xpath到底是什么,我添加了一些精度。我不能将php变量放在一个命令中,只是xpath,就像你之前做的一样,只是用函数转换到当前日期。正如我所说,我不想写字符串“2019”我想要的是:current_date-1我使用需要XPath命令的wordpress插件。我想是PHP!很抱歉,我用逻辑做了第一个,但我不知道xpath到底是什么,我添加了一些精度我不能把php变量,只是xpath放在一个命令中就像你以前做的那样,用函数转换到当前日期你好,谢谢你的回答,我想这不太远,但这对我来说不起作用,也许我使用xpath 1.0?是的,可能您使用哪种XPath处理器和编程语言?很抱歉,仅使用XPath 1.0无法实现您想要的功能。如果您使用的是JS,Saxon JS支持XPath 2.0表达式作为替代,那么您可以创建当前年份并将其存储在变量中(使用JS、PHP等)。然后将其传递给XPath表达式(XPath 1.0兼容)。看起来您使用的是WP All导入。所以是SimpleXML,所以没有XPath2.0。让我想起了我在这里的一次讨论(底部评论):我想你必须用PHP编写一个函数。你好,谢谢你的回答。我认为这不太远,但这对我不起作用,也许我使用Xpath 1.0?是的,可能吧。您使用哪种XPath处理器和编程语言?很抱歉,仅使用XPath 1.0无法实现您想要的功能。如果您使用的是JS,Saxon JS支持XPath 2.0表达式作为替代,那么您可以创建当前年份并将其存储在变量中(使用JS、PHP等)。然后将其传递给XPath表达式(XPath 1.0兼容)。看起来您使用的是WP All导入。所以是SimpleXML,所以没有XPath2.0。让我想起了我在这里的一次讨论(下面的评论):我想你必须用PHP编写一个函数。