我有XML,其中/ forms / form / @ number几乎可以是任何格式(字母,数字和单个空格的任意组合)。偶尔会有@number值,它们是相同的形式......但是是特定于州的。发生这种情况时,最后3个字符将是单个空格,后跟状态缩写。所以最后两个字符是州缩写...如果它存在的话。我需要能够选择这些“相同”的表格进行处理。
XSLT 2.0很好。我认为解决方案将涉及密钥或2.0分组方法,但我不知所措。注意:我仍然需要迭代在同一循环中没有状态特定匹配的表单...这只是我必须为多个状态的那些做一些特殊的事情。当然,我无法控制XML。
<forms>
<!-- THESE 3 WOULD MATCH -->
<form number="ABC 12 45"/>
<form number="ABC 12 45 IL"/>
<form number="ABC 12 45 KY"/>
<!-- 2 OF 3 WOULD MATCH AS ZZ IS NOT A STATE -->
<form number="CGF 45"/>
<form number="CGF 45 ZZ"/>
<form number="CGF 45 IL"/>
<!-- THESE 3 WOULD MATCH -->
<form number="955EZ IL"/>
<form number="955EZ MN"/>
<form number="955EZ CA"/>
<!-- NO MATCHES -->
<form number="25 AB 4"/>
<form number="SR HL DR"/>
</forms>
答案 0 :(得分:1)
只需使用:
<xsl:template match=
"form[substring(@number, string-length(@number) -2, 1)=' '
and
translate(substring(@number, string-length(@number)-1),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
) = ''
and
contains('|AL|AK|AZ|AR|...|WA|WI|WY|',
concat('|',substring(@number, string-length(@number)-1),'|')
)
=
''
]">
<!-- Needed processing here -->
</xsl:template>
XSLT 2.0解决方案:
<xsl:template match=
"form[substring(@number, string-length(@number) -2, 1)=' '
and
substring(@number, string-length(@number)-1)
=
('AL','AK','AZ','AR',...,'WA','WI','WY')
]">
<!-- Needed processing here -->
</xsl:template>