大家好。我有通过 xslt 3.0 处理的 xml,我只需要将日期保留在gotovnost标记中,其他所有内容都已给出。请帮我更改xsl 3.0,以便在gotovnost标签中只留下日期。
收件箱
<zakazy>
<params KodProverki=""
obrabotki1="Жесткий картон, 350 гр."
obrabotki1="KREATO_350_B3"
gotovnost="8 декабря 2022, c 10 до 18 часов"
/>
</zakazy>
xsl 3
<?xml version="1.0"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
expand-text="yes" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:map="http://www.w3.org/2005/xpath-functions/map">
<xsl:output method="xml" encoding="utf-8" indent="yes"
omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:variable name="find_and_replace" as="map(xs:string, xs:string)">
<xsl:map>
<xsl:map-entry key="'Жесткий картон, 350 гр.'"
select="'Картон 350 гр.'"/>
<xsl:map-entry key="'KREATO_350_B3'" select="'Креато 350 гр.'"/>
</xsl:map>
</xsl:variable>
<xsl:template match="@*[.=map:keys($find_and_replace)]">
<xsl:attribute name="{local-name()}"
select="map:get($find_and_replace, .)"/>
</xsl:template>
<xsl:template match="@gotovnost">
<xsl:attribute name="gotovnost">
<xsl:analyze-string select="."
regex="(\d{{1,2}})|(\s\w*\s)">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(1)">
<xsl:value-of select="."/>
</xsl:when>
<xsl:when test="regex-group(2)">
<xsl:choose>
<xsl:when test=". = ' ноября '">
<xsl:text>.11.</xsl:text>
</xsl:when>
<xsl:when test=". = ' декабря '">
<xsl:text>.12.</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
期望的结果
<?xml version='1.0'
encoding='utf-8' ?>
<zakazy>
<params KodProverki=""
obrabotki1Name="Картон 350 гр."
obrabotki1="Креато 350 гр."
gotovnost="8.12.2022"
/>
</zakazy>