gpt4 book ai didi

xslt - XSL 新手 - 我可以制作一个匹配 "this phrase"的 XSL 也匹配 "ths fraze"而不重复整个 "if test" block 吗?

转载 作者:行者123 更新时间:2023-12-04 07:07:14 26 4
gpt4 key购买 nike

我是一个完整的 XSL 新手,正在编写一个 XSL 文件来将许多不同的错误消息格式化,这些错误消息可能出现在由应用程序创建的输出日志中,并转换为 CSV 格式。

这些输出日志中的可匹配标签可能会发生轻微变化。例如,日志中的一个句子可能包含短语“Service Month/Year:”,但另一个来自应用程序不同区域的句子将包含“Svc Month/Yr:”。

有没有办法把那个短语的这些变体放在我的 XSL 的一行中?或者我是否必须重复整个 If 块,并且我想在自己的 If 块中匹配短语中的每个变体?

我尝试在此处发布被反引号包围的 XSL,但它全部运行在一个无法阅读的大块中。如果有人可以帮助解决这个问题,如果您告诉我如何使其可读,我很乐意将其发布。 :-)

谢谢你。

最佳答案

XSL 允许像其他语言一样组合条件语句。每个都不需要它的 on if 语句。你有没有按照这些思路思考?

<xsl:choose>
<xsl:when test="contains(text(), 'Service Month/Year:')
or contains(text(), 'Svc Month/Yr:')
">
<!-- do something -->
</xsl:when>
</xsl:choose>

请记住 xml/xsl 区分大小写。为了使它更灵活,它甚至更冗长:
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:choose>
<xsl:when test="contains(translate(text(), $upper, $lower), 'service month/year:')
or contains(translate(text(), $upper, $lower), 'svc month/yr:')
">
<!-- do something -->
</xsl:when>
</xsl:choose>

编辑:我提出了一个更好的答案
<xsl:template name="containsToken">
<xsl:param name="inputString"/>
<xsl:param name="tokens"/>
<xsl:param name="delimiter"/>
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

<xsl:choose>
<xsl:when test="contains($tokens, $delimiter)">
<xsl:variable name="token">
<xsl:value-of select="substring-before($tokens, $delimiter)"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains(translate($inputString, $upper, $lower), translate($token, $upper, $lower))">
<xsl:text>True</xsl:text>
</xsl:when>
<xsl:otherwise>
<!-- loop -->
<xsl:call-template name="containsToken">
<xsl:with-param name="inputString" select="$inputString"/>
<xsl:with-param name="tokens" select="substring-after($tokens, $delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains(translate($inputString, $upper, $lower), translate($tokens, $upper, $lower))">
<xsl:text>True</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>False</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

用法:
<xsl:variable name="found">
<xsl:call-template name="containsToken">
<xsl:with-param name="inputString" select="text()"/>
<xsl:with-param name="tokens" select="'Service Month/Year:|Svc Month/Yr:'"/>
<xsl:with-param name="delimiter" select="'|'"/>
</xsl:call-template>
</xsl:variable>

<xsl:if test="$found = 'True'">
<!-- process -->
</xsl:if>

分隔符可以是您想要的任何字符或字符。 token 是要搜索的事物列表,每个事物之间都有分隔符。享受!

关于xslt - XSL 新手 - 我可以制作一个匹配 "this phrase"的 XSL 也匹配 "ths fraze"而不重复整个 "if test" block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926799/

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