搜索未包含在元素中的特定文本

问题描述 投票:2回答:1

希望有人可以提供帮助......一直在试图找出如何搜索未包含在特定元素中的特定文本。

文本“图”可以出现在XML文档中的任何位置。图中的单词也可以拼写为“图”......

这就是我到目前为止所做的......但它没有接受文字“图”......

  <rule context="text()">
      <assert test= "(.,'FIGURE')[not(/GRPHCREF)]" role="error" id="error_grphcref_figure"
      >Figure reference not wrapped in GRPHCREF.</assert>
  </rule>

非常感谢任何建议......

schematron
1个回答
1
投票

如果您要测试text()节点是否包含单词“Figure”,请使用contains()函数。要比较不区分大小写,请使用upper-case()函数,或者您可以使用两个文字字符串“Figure”和“Figure”测试contains()

以下规则断言如果text()节点包含单词“Figure”(不区分大小写),则它必须具有GRPHREC元素祖先。

<rule context="text()[contains(upper-case(.), 'FIGURE')]">
  <assert test= "ancestor::GRPHCREF" role="error" id="error_grphcref_figure"
            >Figure reference not wrapped in GRPHCREF.</sch:assert>
</rule>        

虽然我认为将上下文评估和断言测试的值测试分开会更清晰,正如我上面所做的那样。但是,下面演示了如何在所有text()节点上保持更一般的匹配并应用断言测试中的所有条件:

<rule context="text()">
  <assert test= "contains(upper-case(.), 'FIGURE') and ancestor::GRPHCREF" role="error" id="error_grphcref_figure"
            >Figure reference not wrapped in GRPHCREF.</sch:assert>
</rule>  
© www.soinside.com 2019 - 2024. All rights reserved.