Мои XML данные должны выглядеть следующим образом:Schematron: Элемент внутри смешанного типа элемента только с другим содержанием
<mixed_type_parent>
...text...
<other_element1/>
<other_element2/>
<element_in_question>...some content...</element_in_question>
<other_element2>...text...</other_element2>
<other_element1>...text...</other_element1>
...text...
</mixed_type_parent>
То, что я хочу, чтобы убедиться, что с помощью Schematron является то, что «element_in_question» может появиться только в пределах «mixed_type_parent «если есть какой-то текст вне« element_in_question ». Это означает, что
<mixed_type_parent>
<element_in_question>...some content...</element_in_question>
</mixed_type_parent>
не допускается и должно привести к ошибке.
Я попытался получить строку длины всего текста непосредственно в «mixed_type_parent»
string-length(replace(ancestor::mixed_type_parent[1]/text(),' ', ''))
Но, опять же, есть одна из самых раздражающих ошибок в XPath: «Последовательность более одного элемента не допускается в качестве первого аргумента заменить()»
В XSLT Я решил эту проблему простейшей функции вы можете думать о:
<xsl:function name="locfun:make_string">
<xsl:param name="input_sequence"/>
<xsl:value-of select="$input_sequence"/>
</xsl:function>
(это Reall жаль, что там нет такой встроенной функции в XPath.)
Но как я могу использовать эту функцию в Schematron? Я не нашел для этого решения.
И кроме этого: Как получить всю текстовую форму для всех остальных дочерних элементов "mixed_type_parent", кроме "mixed_type_parent"?
Иногда я не понимаю XPath. Я попробовал concat(), потому что это более удобно и получило ошибку. Но работает string-join(). Я просто не понимаю, почему так. Но спасибо вам большое! – cis
В этом случае concat ожидает несколько аргументов, каждая из которых представляет строку, поэтому вам нужно будет узнать количество строк, которые вы хотите выполнить перед рукой, тогда как string-join ожидает последовательность строк и разделителя и, в основном, зацикленный конкат для вас. –