Возможно ли для преобразователя игнорировать ошибки разметки XML? - PullRequest
0 голосов
/ 07 июня 2018

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

<?xml version="1.0" encoding="UTF-8"?>
<row>
     <stuff>Her we have some text and some false markup like <this> and so on</stuff>    
</row>

Если я начну преобразование, я получу сообщение об ошибке, что для «this» нет конечного тега.Есть ли возможность обойти это?

1 Ответ

0 голосов
/ 07 июня 2018

Как вы упомянули oXygen, я думаю, что вы можете использовать XSLT 2 или 3 с Saxon 9. В этом случае вы можете попробовать, дает ли парсер суппорта тега Дэвида Карлайла https://github.com/davidcarlisle/web-xslt/blob/master/htmlparse/htmlparse.xsl, написанный на чистом XSLT 2, вамрезультат разбора вам нужен.

Я сделал пример с последним из ваших двух примеров

    <root>
        <paragraph>Is 3 < 4?</paragraph>
        <paragraph>XSLT is powerful <:</paragraph>
    </root>

в https://xsltfiddle.liberty -development.net / eiZQaFc , полная таблица стилей

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math"
    xmlns:d="data:,dpc"
    exclude-result-prefixes="xs math d"
    version="3.0">


    <xsl:import href="https://github.com/davidcarlisle/web-xslt/raw/master/htmlparse/htmlparse.xsl"/>

    <xsl:param name="mal-formed-markup" as="xs:string"><![CDATA[
        <root>
            <paragraph>Is 3 < 4?</paragraph>
            <paragraph>XSLT is powerful <:</paragraph>
        </root>
    ]]></xsl:param>

    <xsl:template match="/">
        <xsl:copy-of select="d:htmlparse($mal-formed-markup, '', false())"/>
    </xsl:template>

</xsl:stylesheet>

и он разбирает это на

    <root>
        <paragraph>Is 3 &lt; 4?</paragraph>
        <paragraph>XSLT is powerful &lt;:</paragraph>
    </root>

, поэтому для этих двух примеров парсер может исправить вашу разметку по вашему желанию, и в вашем реальном приложении вы, конечно, можете загрузить любой файл не XMLиметь с unparsed-text, а затем передать эту возвращенную строку в функцию d:htmlparse вместо использования данных, включенных в XSLT, в качестве раздела CDATA, как я сделал для примера.

Другой вариант - oXygenПользователь, который предлагает вам коммерческие выпуски Saxon 9, должен использовать функцию расширения http://saxonica.com/html/documentation/functions/saxon/parse-html.html.

Но лучший совет - исправить генерацию ввода с использованием инструментов XML, чтобы вводом был XML изначало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...