Поскольку я начинаю программировать xslt/xsd, я использую XMLSpy для создания преобразования xml2xml. Для обоих xml у меня есть xsd. К сожалению, следующий фрагмент кода недействителен.xslt ожидает элемент вместо xsl: for-each
<xsl:template match="/">
<table xsi:noNamespaceSchemaLocation="table.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:for-each select="table/body/line">
<row>
</row>
</xsl:for-each>
</table>
</xsl:template>
В сообщении об ошибке указано, что после таблицы ожидается элемент строки.
Детали (перевод): элемент <xsl:for-each>
не ожидал от типа {анонимного} элемента <table>
.
Проблема может быть решена путем удаления ссылки на xsd или удаления инструкции for-each.
Однако я не могу понять, что не так. Насколько я понимаю, for-each-loop должен просто повторять теги <row>
для каждой строки в первом xml.
Вот часть xsd цели.
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element ref="row" maxOccurs="unbounded"/>
<xs:element ref="Metadata" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ну, схема определяет, как результат трансформации XSLT должен выглядеть, не так, как XSLT выглядит. Код XSLT обычно представляет собой смесь команд XSLT и элементов результатов, и, очевидно, этот способ не соответствует схеме для результата. Поэтому при написании XSLT я просто проигнорировал бы сообщение. Или вы действительно получаете сообщение об ошибке, которое предотвращает запуск XSLT-преобразования в XMLSpy? –
На самом деле, я не пытался запустить XSL-преобразование ... но он действительно работает. Наверное, сейчас я проигнорирую сообщение. Благодарю. –