Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Schematrion不区分大小写sqf:stringReplace_Xml_Xslt_Schematron - Fatal编程技术网

Xml Schematrion不区分大小写sqf:stringReplace

Xml Schematrion不区分大小写sqf:stringReplace,xml,xslt,schematron,Xml,Xslt,Schematron,我创建了一个schematron规则,该规则以不区分大小写的方式搜索变量给定的特定文本(由“I”标志提供): 。。。 其中$PHASE='(PHASE)' 我希望用户能够使用快速修复并替换文本,但我不知道如何在快速修复中提供不区分大小写的解决方案。我的初始版本如下所示: <sqf:fix id="replaceWithKey"> <sqf:stringReplace regex="{$phrase}"> ... </sqf:stringReplace>

我创建了一个schematron规则,该规则以不区分大小写的方式搜索变量给定的特定文本(由“I”标志提供):

。。。
其中$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>