Xml Schematrion不区分大小写sqf:stringReplace
我创建了一个schematron规则,该规则以不区分大小写的方式搜索变量给定的特定文本(由“I”标志提供):Xml Schematrion不区分大小写sqf:stringReplace,xml,xslt,schematron,Xml,Xslt,Schematron,我创建了一个schematron规则,该规则以不区分大小写的方式搜索变量给定的特定文本(由“I”标志提供): 。。。 其中$PHASE='(PHASE)' 我希望用户能够使用快速修复并替换文本,但我不知道如何在快速修复中提供不区分大小写的解决方案。我的初始版本如下所示: <sqf:fix id="replaceWithKey"> <sqf:stringReplace regex="{$phrase}"> ... </sqf:stringReplace>
。。。
其中$PHASE='(PHASE)'
我希望用户能够使用快速修复并替换文本,但我不知道如何在快速修复中提供不区分大小写的解决方案。我的初始版本如下所示:
<sqf:fix id="replaceWithKey">
<sqf:stringReplace regex="{$phrase}">
...
</sqf:stringReplace>
...
只有当文本部分的大小写与$phrase完全相同时,快速修复才有效,尽管在每种情况下都会发现违反规则的情况。有没有一种方法可以利用regex属性中的“i”标志功能?我没有使用SQF,但我认为最后一个问题的答案是“否”。根据,
不允许使用标志属性,就像XSLT中的
一样
并且没有提供在正则表达式本身中传递这些标志的方法
最简单的方法可能是修改SQF,将标志属性添加到
,或者要求SQF作者进行更改。关于此主题的两个更新:
在sqf:stringReplace
中对标志的支持将在将来添加到sqf中
解决方法是将sqf:replace
函数与xsl:analyze string
结合使用,如下所示:
<sqf:replace>
<xsl:analyze-string select="." regex="{$phrase}" flags="i">
<xsl:matching-substring>...</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching substring>
</xsl:analyze-string>
</sqf:replace>
...
你能澄清“工作”吗?快速修复有效与无效时的结果有什么不同?例如,如果$phrase='(phrase'),schematron将突出显示几个文本案例,如“phrase”、“phrase”或“phrase”。这些情况下都会提供快速修复选项,但stringReplace功能只会替换“短语”。对于“短语”和“短语”,将不采取任何行动。如果$phrase包含像[Pp][Hh][Rr][Aa][Ss][Ee]这样的正则表达式,那么QuickFix将正常工作,但对于我遇到的所有情况,这并不是一个灵活的解决方案。如果regex属性中不能包含“i”修饰符,那么可能没有很好的解决方案。
<sqf:replace>
<xsl:analyze-string select="." regex="{$phrase}" flags="i">
<xsl:matching-substring>...</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching substring>
</xsl:analyze-string>
</sqf:replace>