С помощью этого источника XML:Почему <xsl: template match = "/"> выдает ошибку при добавлении <xsl: result-document>?
<?xml version='1.0' encoding='UTF-8'?>
<ns:Report_Data xmlns:ns="urn:someURN">
<ns:Report_Entry>
<ns:ReportName>SomeReportName</ns:ReportName>
<ns:ReportComments>Some description for this report....</ns:ReportComments>
<ns:AreaWhereUsed Descriptor="ThisIsATransform">
<ns:ID type="GUID">SomeUniqueID</ns:ID>
<ns:ID type="Component_ID">CUSTOM_COMPONENT</ns:ID>
</ns:AreaWhereUsed>
<ns:AreaWhereUsed Descriptor="SomeProcessName">
<ns:ID type="GUID">SomeDifferentUniqueID</ns:ID>
<ns:ID type="Process_ID">SomeProcessName</ns:ID>
</ns:AreaWhereUsed>
<ns:Area_Where_Used/>
<ns:Area_Where_Used>
<ns:AWU_Comment>This is some process description</ns:AWU_Comment>
</ns:Area_Where_Used>
<ns:CFs>
<ns:CF>SomeCF</ns:CF>
</ns:CFs>
</ns:Report_Entry>
</ns:Report_Data>
Я пытаюсь преобразовать его в набор текстовых документов. Один документ для каждой «записи отчета».
Когда я использую этот XSL:
<?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:ns="urn:someURN"
exclude-result-prefixes="xs" version="2.0">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:variable name="delimiter" select="'	'"/>
<xsl:variable name="quote" select="'"'"/>
<xsl:variable name="linefeed" select="'
'"/>
<xsl:template match="/">
<!-- Data Row Begins -->
<xsl:for-each select="/ns:Report_Data/ns:Report_Entry">
<xsl:text>Text and various other stuffs</xsl:text>
</xsl:for-each>
<!-- Data Row End -->
</xsl:template>
</xsl:stylesheet>
Выход является то, что одна строка текста, который я в основном ожидать.
Однако, когда я добавить result-document
тег, например:
<?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:ns="urn:someURN"
exclude-result-prefixes="xs" version="2.0">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:variable name="delimiter" select="'	'"/>
<xsl:variable name="quote" select="'"'"/>
<xsl:variable name="linefeed" select="'
'"/>
<xsl:template match="/">
<!-- Data Row Begins -->
<xsl:for-each select="/ns:Report_Data/ns:Report_Entry">
<xsl:result-document method="text" href="file_{@ns:ReportName}-output.txt">
<xsl:text>Text and various other stuffs</xsl:text>
</xsl:result-document>
</xsl:for-each>
<!-- Data Row End -->
</xsl:template>
</xsl:stylesheet>
Я получаю ошибку: Error: Internal error evaluating template rule at line 10 in module
, который ссылается на шаблон строки: <xsl:template match="/">
Я использую сайт http://xslttest.appspot.com/ для тестирования моего преобразования.
Я все еще довольно новичок в XSL, поэтому я не совсем понимаю, что делают теги шаблона и шаблона приложения. Я был бы признателен за любые указания относительно того, как тег шаблона взаимодействует с тегом результата-документа.
(Обратите внимание, что я сильно дезинфицировал код, но он работает, как указано выше).
Спасибо!
Итак, вы используете онлайн-приложение, в котором вы хотите записать файл с помощью 'xsl: result-document'? Где вы ожидаете, что файл будет записан? Я бы предложил протестировать в среде (например, в вашей собственной системе с установленным XSLT-процессором или установленной XML-IDE), где вы можете быть уверены, что ваш процессор имеет право получить доступ к файловой системе для записи результатов. –
Извините, я должен добавить, что я также пробовал это в целевой среде (о которой я сказал, что поставщик поддерживает эту функцию), и он также произвел аналогичную неопределенную ошибку. – Matt
Если выходной формат должен быть простым текстом, мне интересно, почему у вас есть 'href =" файл _ {@ ReportName} -output.xml "' с '.xml'. Я также задаюсь вопросом, почему у вас есть '@ ReportName', я думаю, что вы хотите' ReportName' вместо этого, поскольку у вас есть только элемент этого имени, а не атрибут этого имени. –