2015-01-30 3 views
1

Я пытаюсь объединить два файла. Один из них - XML ​​и другой HTML. Я, наверное, ошибаюсь, я не очень хорошо разбираюсь в обработке XSLT.Конкатенация двух xml/html файлов с XSLT

прилагаю файл XSL в XML-файл, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<REPORT> 
    <YASCA /> 
    <AOSCAT /> 
</REPORT> 

И это то, что файл XSL выглядит следующим образом:

<?xml version="1.0"?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml"/> 
     <xsl:template match="//YASCA"> 
      <xsl:copy> 
       <xsl:copy-of select="document('abc.xml')"/> 
      </xsl:copy> 
     </xsl:template> 
     <xsl:template match="//AOSCAT"> 
      <xsl:copy> 
       <xsl:copy-of select="document('xyz.html')"/> 
      </xsl:copy> 
     </xsl:template> 
</xsl:transform> 

И это ошибка, сообщение я получить от AltovaXMLSpy после применения XSLT и пытается сохранить созданный документ:

XML Production Error: Character 'A' following the text '<' does not fulfill production 'Misc'. 

Это происходит при Т он указывает в файле, где заканчивается первый тег (контейнер для содержимого файла XML), и начинается второй (контейнер для содержимого файла HTML).

</YASCA><AOSCAT> 

Я также пробовал различные подходы объединения файлов (некоторые из них я нашел на StackOverflow), но ни один из них не работал, и это, кажется, наиболее благоприятным, так как он просто должен это именно то, что я хочу.

Надеюсь, я достаточно объяснил свою проблему, и кто-то может мне помочь.

С наилучшими пожеланиями

Marty

+0

Почти достаточно, пожалуйста, добавьте оба 'abc.xml' и' xyz.html'. –

ответ

1

Ну в общем HTML не XML, и вы не сможете использовать document('file.html') успешно. Но в вашем случае кажется, что операция работает, но вам не удалось скопировать ваш корневой элемент, поэтому вы получаете два элемента верхнего уровня в результирующем документе, который тогда не является XML, поскольку должен существовать один корневой элемент. Поэтому добавьте

<xsl:template match="/*"> 
    <xsl:copy> 
    <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

в ваш XSLT, и результатом будет сформированный XML-документ с одним корневым элементом.

Это довольно загадочное сообщение об ошибке в основном говорит вам о том, что разметка, следующая за первым элементом результата, не соответствует производству Misc в спецификации XML, которая разрешает только комментарии и/или инструкции по обработке, следующие за единственным разрешенным корневым элементом.

+0

Большое вам спасибо! Все работает отлично! Я действительно не понимал, что мне не хватает элемента root и что он является обязательным. Еще раз спасибо, я многому научился. знак равно –

Смежные вопросы