Я не уверен, что существует способ фиксировать ошибки синтаксического анализа XML первичного входного документа в преобразование XSLT 3 на основе apply-templates
, но в целом XSLT 3 с xsl:try/xsl:catch
позволяет вам захватывать и обрабатывать ошибки времени выполнения, предполагая, что вы можете организовать оставшуюся часть кода (например, используя именованный шаблон в качестве отправной точки) для загрузки / анализа любых документов XML с помощью функции doc
или document
, тогда вы можете использовать try/catch
для обработки парсинга ошибки. Примером является https://xsltfiddle.liberty -development.net / ej9EGcg / 2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:err="http://www.w3.org/2005/xqt-errors"
exclude-result-prefixes="#all"
version="3.0">
<xsl:template match="/">
<root>
<xsl:try>
<xsl:variable name="doc1" select="doc('https://raw.githubusercontent.com/martin-honnen/martin-honnen.github.io/master/xslt/2019/test2019032601.xml')"/>
<xsl:value-of select="count($doc1//item)"/>
<xsl:catch>Error code: <xsl:value-of select="$err:code"/>
Reason: <xsl:value-of select="$err:description"/>
</xsl:catch>
</xsl:try>
</root>
</xsl:template>
</xsl:stylesheet>
, который, в зависимости от ваших потребностей, также может быть уменьшен для непосредственного использования соответствующего выражения XPath с атрибутом select
элемента xsl:try
, например. https://xsltfiddle.liberty -development.net / ej9EGcg / 3
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:err="http://www.w3.org/2005/xqt-errors"
exclude-result-prefixes="#all"
version="3.0">
<xsl:template match="/">
<root>
<xsl:try select="count(doc('https://raw.githubusercontent.com/martin-honnen/martin-honnen.github.io/master/xslt/2019/test2019032601.xml'))">
<xsl:catch>Error code: <xsl:value-of select="$err:code"/>
Reason: <xsl:value-of select="$err:description"/>
</xsl:catch>
</xsl:try>
</root>
</xsl:template>
</xsl:stylesheet>