gpt4 book ai didi

regex - 如何在XSLT 1.0中使用正则表达式?

转载 作者:行者123 更新时间:2023-12-03 14:11:36 24 4
gpt4 key购买 nike

我正在使用XSLT 1.0。
我的输入信息可能包含这些值

<!--case 1-->
<attribute>123-00</attribute>

<!--case 2-->
<attribute>Abc-01</attribute>

<!--case 3-->
<attribute>--</attribute>

<!--case 4-->
<attribute>Z2-p01</attribute>


我想找出那些符合条件的字符串:

if string has at least 1 alphabet AND has at least 1 number,
then
do X processing
else
do Y processing


在上面的示例中,对于情况1,2,4,我应该能够执行 X处理。对于情况3,我应该能够进行 Y处理。

我的目标是使用正则表达式(在XSLT 1.0中)。

对于所有情况,该属性可以采用任何长度的任何值。

我尝试使用 match,但是处理器返回了错误。
我尝试使用 translate函数,但不确定是否使用正确的方法。

我在想

if String matches [a-zA-Z0-9]* 
then do X processing
else
do y processing.


如何使用XSLT 1.0语法实现该功能?

最佳答案

该解决方案确实在XSLT 1.0中有效(并且更简单,因为它不需要也不需要使用double-translate方法。):

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vUpper" select=
"'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

<xsl:variable name="vLower" select=
"'abcdefghijklmnopqrstuvwxyz'"/>

<xsl:variable name="vAlpha" select="concat($vUpper, $vLower)"/>

<xsl:variable name="vDigits" select=
"'0123456789'"/>

<xsl:template match="attribute">
<xsl:choose>
<xsl:when test=
"string-length() != string-length(translate(.,$vAlpha,''))
and
string-length() != string-length(translate(.,$vDigits,''))">

Processing X
</xsl:when>
<xsl:otherwise>
Processing Y
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>


应用于提供的XML片段时,可以制作出格式良好的XML文档:

<t>
<!--case 1-->
<attribute>123-00</attribute>
<!--case 2-->
<attribute>Abc-01</attribute>
<!--case 3-->
<attribute>--</attribute>
<!--case 4-->
<attribute>Z2-p01</attribute>
</t>


所需的正确结果产生了:

Processing Y


Processing X

Processing Y


Processing X


请注意:任何尝试使用像这样的XSLT 1.0处理器代码(从该问题的另一个答案中借用)的尝试都将失败,并显示以下错误:

<xsl:template match=
"attribute[
translate(.,
translate(.,
concat($upper, $lower),
''),
'')
and
translate(., translate(., $digit, ''), '')]
">


因为在XSLT 1.0中,匹配模式禁止包含变量引用。

关于regex - 如何在XSLT 1.0中使用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916208/

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