Можно ли сохранить сообщение об ошибке парсера в переменной, используя xslt2.0 или xslt 3.0 - PullRequest
1 голос
/ 26 марта 2019

Я выполняю преобразование XML-файла с использованием xslt и хочу отобразить сообщение об ошибке синтаксического анализатора xslt в элементе

Примечание. Сообщение об ошибке должно быть оригинальным из сообщения синтаксического анализатора

1 Ответ

0 голосов
/ 28 марта 2019

Я не уверен, что существует способ фиксировать ошибки синтаксического анализа 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>
...