Получение выходных данных преобразованного файла xslt в формате XML - PullRequest
2 голосов
/ 03 марта 2011

Я преобразовал один XML-файл в другой XML-файл (в желаемой структуре), используя XSLT.Однако я не могу просмотреть преобразованный файл в формате XML.Он показывает мне значения простого текста.

Это мой оригинальный XML-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl"?>
<NewDataSet>
<Table>
 <IMPORT_ID>2</IMPORT_ID>
 <SEQ_NO>1</SEQ_NO>
 <LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG>
 <INSERTED>2004-01-21T12:42:53+05:30</INSERTED>
 <INSERTED_BY>kfsv433</INSERTED_BY>
</Table>
   </NewDataSet>

И я добавил его к желаемому выводу, используя следующий XSLT:

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/> 
<xsl:strip-space elements="*"/> 
  <xsl:template match="/"> 
  <xsl:apply-templates /> 
 </xsl:template> 
 <xsl:template match="IMPORT_ID"> 
 <IMPORT_ID SEQ_NO="{SEQ_NO/text()}"/> 
 </xsl:template> 
</xsl:stylesheet>

Я получаю вывод как

1RANDOMISATIONDATA2004-01-21T12:42:53+05:30kfsv433

Я вижу, что все, что я реализовал в XSLT, показывает правильный результат, но мне нужно получить его в формате XML.

Пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Я думаю, вы хотите это :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>
    <xsl:template match="IMPORT_ID">
        <IMPORT_ID SEQ_NO="{following-sibling::SEQ_NO[1]/text()}"/>
    </xsl:template>

    <xsl:template match="text()"/>
</xsl:stylesheet>

когда это преобразование применяется к предоставленному документу XML:

<NewDataSet>
    <Table>
        <IMPORT_ID>2</IMPORT_ID>
        <SEQ_NO>1</SEQ_NO>
        <LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG>
        <INSERTED>2004-01-21T12:42:53+05:30</INSERTED>
        <INSERTED_BY>kfsv433</INSERTED_BY>
    </Table>
</NewDataSet>

желаемый результат получен :

<IMPORT_ID SEQ_NO="1"/>

Объяснение

  1. Все текстовые узлы сопоставляются с шаблоном с пустым телом , который переопределяет обработку XSLT по умолчанию, поэтому текстовые узлы теперь не копируются в выходные данные.

  2. SEQ_NO это не ребенок IMPORT_ID - это брат .

1 голос
/ 20 мая 2011

Не используйте браузер. использовать настоящий процессор xslt, такой как http://saxon.sourceforge.net.

0 голосов
/ 03 марта 2011

Вы получаете вывод по умолчанию, что означает, что ваш шаблон IMPORT_ID не выполняется.

Попробуйте вместо этого следующие шаблоны:

<xsl:template match="/"> 
    <xsl:apply-templates select="//Table"/>
</xsl:template> 

<xsl:template match="Table"> 
    <IMPORT_ID SEQ_NO="{SEQ_NO}/{IMPORT_ID}"/> 
</xsl:template>
...