xslt - 使用 XSLT 查找日期是否在日期范围内
问题描述
我有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<divisions>
<userProvidedEffDate>12/31/2002</userProvidedEffDate>
<division>
<GroupNumber>001</GroupNumber>
<GroupEffDt>01/01/2000</GroupEffDt>
<GroupExpDt>12/31/9999</GroupExpDt>
</division>
<division>
<GroupNumber>002</GroupNumber>
<GroupEffDt>01/01/2000</GroupEffDt>
<GroupExpDt>12/31/2001</GroupExpDt>
</division>
</divisions>
现在我想使用 XSLT 1.0 基于<userProvidedEffDate>
. 如果<userProvidedEffDate>
介于<division>'s
<GroupEffDt>
和<GroupExpDt>
(含)的日期范围内,则显示该除法。例如,上面的输入 xml 应该根据<userProvidedEffDate>
值 12/31/2002 转换如下。
<?xml version="1.0" encoding="UTF-8"?>
<divisions>
<userProvidedEffDate>12/31/2002</userProvidedEffDate>
<division>
<GroupNumber>001</GroupNumber>
<GroupEffDt>01/01/2000</GroupEffDt>
<GroupExpDt>12/31/9999</GroupExpDt>
</division>
</divisions>
任何帮助表示赞赏。
解决方案
作为为什么切换到 Saxon 9 的示例,如果必须在 XSLT 1.0 中执行此操作(没有任何扩展函数),则必须将日期转换为 YYYYMMDD 形式的数字。
例如
<xsl:variable name="userProvidedEffDate" select="number(concat(substring(userProvidedEffDate, 7, 4), substring(userProvidedEffDate, 1, 2), substring(userProvidedEffDate, 4, 2)))" />
试试这个 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="divisions">
<xsl:variable name="userProvidedEffDate" select="number(concat(substring(userProvidedEffDate, 7, 4), substring(userProvidedEffDate, 1, 2), substring(userProvidedEffDate, 4, 2)))" />
<xsl:copy>
<xsl:apply-templates select="@*|userProvidedEffDate" />
<xsl:apply-templates select="division
[number(concat(substring(GroupEffDt, 7, 4), substring(GroupEffDt, 1, 2), substring(GroupEffDt, 4, 2))) <= $userProvidedEffDate
and number(concat(substring(GroupExpDt, 7, 4), substring(GroupExpDt, 1, 2), substring(GroupExpDt, 4, 2))) >= $userProvidedEffDate]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当然,如果您可以控制 XML,一个简单的解决方案是首先在 XML 中使用 YYYYMMDD 格式的日期
推荐阅读
- testng - 在以编程方式运行 testNG 测试时使用 aspectJweaver
- shell - t-sql (SQL Server) 使用用户定义函数检查文件或目录是否存在的解决方案
- docker - 仅将 docker 端口公开给内部网络
- mysql - INNODB -> 默认列应该为零还是空?
- javascript - 为什么 TypeScript 中的 `instance.constructor.staticProperty` 不起作用?
- node.js - 如何从 mongodb 获取单选按钮值到编辑/更新表单?(Angular | Express | Nodejs | MongoDB)
- r - 为动态网络可视化格式化起始终点数据
- python - 在pyexcel中读取单元格格式
- javascript - 如何在 testcafe 脚本中添加递归函数检查 xhr 响应?
- pyspark - Pyspark 中的数据透视表