Nano Hash - криптовалюты, майнинг, программирование

XSL - не удается скомпилировать ошибку таблицы стилей, но синтаксис в порядке

Я получил эту ошибку, когда делаю это на Java:

InputStream foo = getClass().getResourceAsStream(XML_TRANSFORM);
javax.xml.transform.Transformer transformer = factory.newTransformer(new StreamSource(foo)); // error

Я не могу понять, где ошибка, потому что у меня нет больше информации, и потому что онлайн-валидаторы XML говорят мне, что синтаксической ошибки нет (например: https://www.w3schools.com/xml/xml_validator.asp)

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <TimeSeriesDoc>
        <xsl:apply-templates select="/eai-document" />
        <xsl:apply-templates select="eai-timeserie" />
    </TimeSeriesDoc>

    <xsl:template match="/eai-document">
        <DocumentHeader>
            <Identification v="{@identification}" />
            <Version v="{@version}" />
            <Type v="{@type}" />
            <Status v="{@status}" />
            <ClassificationType v="{@classification}" />
            <CreationDateTime v="{@creation-date-time}" />
            <ProcessType v="{@process-type}" />
            <Initiator v="{@initiator}" />
            <InitiatorRole v="initiator-role}" />
            <Receptor v="{@receptor}" />
            <ReceptorRole v="{@receptor-role}" />
            <ElaborateDateTime v="{@elaborate-date-time}" />
        </DocumentHeader>
    </xsl:template>

    <xsl:template match="eai-timeserie">
        <TimeSeries>
            <Identification v="{@identification}" />
            <BusinessType v="{@business-type}" />
            <Product v="{@product}" />
            <ObjectAggregation v="{@object-agregation}" />
            <AreaIdentification v="{@area-id}" />
            <ResourceObject v="{@resource-object}" />
            <MeasureUnit v="{@measure-unit}" />
            <CurveType v="{@curve-type}" />

            <xsl:apply-templates select="eai-period" />
        </TimeSeries>
    </xsl:template>

    <xsl:template match="eai-period">
        <Period>
            <Resolution v="{@resolution}" />

            <xsl:apply-templates select="eai-point" />
        </Period>
    </xsl:template>

    <xsl:template match="eai-point">
        <Pt>
            <P v="{@position}" />
            <Q v="{@quantity}" />
        </Pt>
    </xsl:template>

</xsl:stylesheet>

  • См. stackoverflow.com/questions/20605328/official-xslt-validator. почему этот валидатор не помогает вам. Использование такого инструмента, как xsltproc, сразу определяет ряд конкретных проблем с вашей таблицей стилей. 22.11.2017
  • Ваш документ является допустимым XML, но не допустимым XSLT. Получение «зеленого света» от валидатора XML бессмысленно, поскольку вы передаете документ процессору XSLT. Исключение, возникающее при вызове newTransformer, сообщает вам, в чем именно заключается ошибка (какое нарушение синтаксиса) и где ее найти (номер строки). 22.11.2017
  • - Джо - О, хорошо, спасибо. - jarnbjo - Нет мне совершенно не подсказывает где ошибка и где ее искать. Иначе меня бы здесь не было. - Мейер Коэн - это действительно дубликат, спасибо (не смог найти ничего полезного, когда искал перед публикацией). Оказывается, мой входной поток равен нулю, даже если я понятия не имею, почему... на самом деле метод должен генерировать исключение IllegalArgumentException... 22.11.2017

Ответы:


1

В XSLT есть немного странное правило, которое означает, что если вы

<x:TimeSeriesDoc>
    <xsl:apply-templates select="/eai-document" />
    <xsl:apply-templates select="eai-timeserie" />
</x:TimeSeriesDoc>

на верхнем уровне вашей таблицы стилей, тогда это будет допустимо (но проигнорировано и бесполезно), а если у вас есть

<TimeSeriesDoc>
    <xsl:apply-templates select="/eai-document" />
    <xsl:apply-templates select="eai-timeserie" />
</TimeSeriesDoc>

тогда он недействителен (и ошибка).

Если процессор не сообщает вам, где находится ошибка, возможно, это связано с тем, что ваше Java-приложение отправляет поток вывода системной ошибки туда, где вы его не видите. Либо исправьте эту проблему в своем приложении, либо попробуйте отладить свои таблицы стилей с помощью такой среды, как oXygen, прежде чем компилировать их из приложения Java. Поскольку ваша ошибка указывает на недостаточное знакомство с основами языка XSLT, вам действительно было бы полезно использовать для разработки такой инструмент, как oXygen (или Stylus Studio, или XML Spy).

24.11.2017
  • Благодарю за ваш ответ. На самом деле единственной информацией, которая у меня была, была ERROR : 'null'. Оказалось, что мой объект InputStream был нулевым, потому что мой путь к xsl был неправильным. Когда мой InputStream был правильным, у меня не было ошибки в том, что вы сказали. Просто преобразование создало документ без тега ‹TimeSeriesDoc›. 24.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..