XPATH-获取距离当前日期不到1年的所有xml节点
我有一个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")
<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编写一个函数。