gpt4 book ai didi

xml - 基于到期日期属性的XPath选择

转载 作者:行者123 更新时间:2023-12-03 17:20:19 25 4
gpt4 key购买 nike

鉴于此XML:

<?xml version="1.0" encoding="utf-8"?>
<content dataType="XML">
<item type="Promotion" name="Sample Promotion" expires="04/01/2009">
<![CDATA[
<p>Details here.</p>
]]>
</item>
<item type="Promotion" name="Sample Promotion 2" expires="05/01/2009">
<![CDATA[
<p>Details here.</p>
]]>
</item>
</content>


XPath是什么来选择尚未过期的项目?

最佳答案

如果提供了当前日期,可以通过单个XPath表达式选择过期的<item>元素-可以是变量,也可以是文字字符串。

下面的解决方案使用XSLT 1.0作为XPath 1.0的托管语言。

为了方便起见,将当前日期指定为名为<xsl:param>的全局pToday参数。

另一个方便之处是,当前年份,月份和日期的值在变量$vthisYear$vthisMonth$vthisDay中定义。如有必要,所有这些变量引用都可以在XPath表达式中用其定义的右侧替换。

所需的单个XPath表达式包装在以下XSLT转换中:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"
cdata-section-elements="item"/>


<xsl:param name="pToday" select="'04/23/2009'"/>

<xsl:variable name="vthisDay" select=
"substring($pToday,4,2)"/>

<xsl:variable name="vthisMonth" select=
"substring($pToday,1,2)"/>

<xsl:variable name="vthisYear" select=
"substring($pToday,7)"/>

<xsl:template match="/">
<nonExpired>
<xsl:copy-of select=
"/*/item
[$vthisYear &lt; substring(@expires,7)
or
($vthisYear = substring(@expires,7)
and
$vthisMonth &lt; substring(@expires,1,2)
)
or
($vthisYear = substring(@expires,7)
and
$vthisMonth = substring(@expires,1,2)
and
$vthisDay &lt;= substring(@expires,4,2)
)
]

"/>
</nonExpired>
</xsl:template>
</xsl:stylesheet>


对提供的XML文档应用上述转换时:

<content dataType="XML">
<item type="Promotion" name="Sample Promotion" expires="04/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
<item type="Promotion" name="Sample Promotion 2" expires="05/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
</content>


所需的结果产生:

<nonExpired>
<item type="Promotion" name="Sample Promotion 2" expires="05/01/2009"><![CDATA[ <p>Details here.</p> ]]></item>
</nonExpired>


注意:只要纠正了其中的一些小错误,oneporter的解决方案也将起作用。此外,由于需要不切实际的期望,因此当前的日期将以不同于 @expires属性中日期的格式提供,因此需要重新处理。

关于xml - 基于到期日期属性的XPath选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com