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

search for specific text not wrapped within an element

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

文本 "FIGURE" 可以出现在 XML 文档中的任何位置。 FIGURE 这个词也可以拼写为 "Figure"...

这就是我目前所拥有的...但是它没有接受文字 "FIGURE"...

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

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

如果您尝试测试 text() 节点是否包含单词 "FIGURE",请使用 contains() function. To compare case-insensitive, use the upper-case() 函数,或者您可以使用两个函数测试 contains()文字字符串 "FIGURE" 和 "Figure".

以下规则断言,如果 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>