Поиск определенного текста, не заключенного в элемент

Надеясь, что кто-то может помочь... пытался выяснить, как искать конкретный текст, который не заключен в определенный элемент.

Текст "ФИГУРА" может появляться в любом месте XML-документа. Слово ФИГУРА также может быть написано "Фигура"...

Это то, что я имею до сих пор... но это не подхватывает буквальный текст "ФИГУРА"...

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

Большое спасибо за любые предложения...

1 ответ

Решение

Если вы пытаетесь проверить, является ли text() узел содержит слово "ФИГУРА", используйте contains() функция. Для сравнения без учета регистра используйте upper-case() функция, или вы можете проверить contains() с двумя буквенными строками "FIGURE" и "Figure".

Следующее правило утверждает, что если text() узел содержит слово "ФИГУРА" (без учета регистра), то он должен иметь 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() узлы и применить все условия в рамках теста assert:

<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>  
Другие вопросы по тегам