gpt4 book ai didi

xslt - 使用 xslt 根据日期条件计算 XML

转载 作者:行者123 更新时间:2023-12-04 05:53:22 24 4
gpt4 key购买 nike

我是第一次使用 xslt。我有 2.0,但这是我可以使用我们拥有的 c# 转换库获得的唯一优势。我正在尝试计算 XML 文档中包含超过 12 年前的日期并具有特定类型属性的子节点的数量。

示例 xml 结构:

<xml version=\"1.0\" encoding=\"utf-8\"?>
<... />
<Dependents>
<Dependent><DOB>1964-04-01</DOB><DependentType>Spouse</DependentType></Dependent>
<Dependent><DOB>2000-01-01</DOB><DependentType>Child</DependentType></Dependent>
<Dependent><DOB>2012-01-01</DOB><DependentType>Child</DependentType></Dependent>
</Dependents>
<... />

哪里 <... />表示一些额外的不相关的东西。

所以基本上,我想要 12 岁以下 child 的数量。 (我有所有年龄段的dependenttype = 工作的 child 的数量,这只是给我带来麻烦的 12 岁以下的 child )。向我建议的方法是构建一个代表 12 年前从今天开始的变量,并将其用作 count() 中比较的基础。功能。这听起来很合理,但我一直坚持在不使用 3rd 方库(例如 exslt)的情况下构建日期,这些库经常在这样的问题中链接,以获得简单、方便的答案。

到目前为止,我为此获得的 xslt 是:
<xsl:variable name="today" select="current-dateTime()" as="xs:dateTime" />
<xsl:variable name="twelveyearsago" select="xs:dateTime(concat(year-from-dateTime($today) - 12, '-', month-from-dateTime($today), '-', day-from-dateTime($today)))" />
<xsl:text>12yearsago=</xsl:text><xsl:value-of select="$twelveyearsago" />

并且它不起作用,因为从 dateTime 开始的月份(和可能的从 dateTime 开始的日期)没有添加前导零。今天,2012 年 3 月 21 日,我回来了: Saxon.Api.DynamicError : Invalid dateTime value "2000-3-21"(Month must be two digits)( W3Schools xpath function reference 暗示他们应该,但他们没有.)

我想输出的是:
<xsl:text>&amp;numberofchildren=</xsl:text><xsl:value-of select="count(//InsuranceRequest/HealthInsurance/Dependents/Dependent/DependentType[text() = 'Child'])" />
<xsl:text>&amp;childrenunder12=</xsl:text><xsl:value-of select="children under twelve" />

我越是反对这个,我就越觉得有一种我没有看到的更简单的方法。

编辑:我清理了 xslt 语法,因此它是有效的,而不是双引号 c# 字符串。

最佳答案

您可以简单地减去 duration 12 年,如 <xsl:variable name="twelveyearsago" select="$today - xs:yearMonthDuration('P12Y')"/> ,然后使用例如//Dependent[DependentType = 'Child' and xs:date(DOB) >= $twelveyearsago] .

[编辑]
这是一个模板,可以很好地编译和执行 Saxon 9.4:

  <xsl:template match="/">
<xsl:variable name="today" select="current-date()"/>
<xsl:variable name="twelve-years-ago" select="$today - xs:yearMonthDuration('P12Y')"/>
<xsl:value-of select="count(//Dependent[DependentType = 'Child' and xs:date(DOB) >= $twelve-years-ago])"/>
</xsl:template>

关于xslt - 使用 xslt 根据日期条件计算 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809088/

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