Поиск определенного текста, не заключенного в элемент
Надеясь, что кто-то может помочь... пытался выяснить, как искать конкретный текст, который не заключен в определенный элемент.
Текст "ФИГУРА" может появляться в любом месте 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>