2015-01-13 3 views
0

У меня есть требование, когда я хочу преобразовать данные внутренней таблицы в формат JSON.XSLT - нужна помощь для преобразования в неопределенный формат JSON

Предположим, что мое внутреннее имя таблицы ZEMPLOYEE и поля в нем: EMPID, ENAME, ESAL. Нормальное преобразование вызова преобразует его в формат ниже.

Данные- [{EmpId: 101, ENAME: 'ABCD', ESAL: 100}, {EmpId: 102, ENAME: 'EFGH', ESAL: 200}, {EmpId: 103, ENAME: 'IJKL », ESAL: 300}]

Но мое требование формат вывода должен выглядеть следующим образом:

Данные- [{EmpId, ENAME, ESAL}, {101, ABCD, 100}, {102, EFGH, 200}, {103, IJKL, 300}] ...

Где ель st фигурные скобки будут содержать поля моей таблицы, а оставшиеся фигурные скобки содержат фактические данные.

Может ли кто-нибудь помочь мне достичь вышеуказанного результата с помощью преобразования XSLT или простого преобразования?

+0

Пожалуйста, напишите ввод xml, а также xslt, который вы пробовали – Saurav

+0

HI Saurav, Это XML, который у меня есть ... - - AA American Airlines USD - AB Air Berlin EUR - AC Air Canada CAD - AF Air France EUR

+0

откуда вы получаете это «101, ABCD, 100» данные? – Saurav

ответ

0

Что вы показываете нам, гораздо ближе к CSV, чем к JSON. Попробуйте что-то вроде:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="UTF-8"/> 

<xsl:template match="/*"> 
    <!-- header --> 
    <xsl:text>Data-[{</xsl:text> 
    <xsl:for-each select="*[1]/*"> 
     <xsl:value-of select="local-name()"/> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    <xsl:text>},</xsl:text> 

    <!-- data --> 
    <xsl:for-each select="*"> 
     <xsl:text>{</xsl:text> 
     <xsl:for-each select="*"> 
      <xsl:value-of select="."/> 
      <xsl:if test="position()!=last()"> 
       <xsl:text>,</xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
     <xsl:text>}</xsl:text> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    <xsl:text>]</xsl:text> 
</xsl:template> 

</xsl:stylesheet> 

При нанесении на хорошо сформированный входной например в (!):

<FLIGHT_TABLE> 
    <ZSCARR_LINE> 
    <CARRID>AA</CARRID> 
    <CARRNAME>American Airlines</CARRNAME> 
    <CURRCODE>USD</CURRCODE> 
    </ZSCARR_LINE> 
    <ZSCARR_LINE> 
    <CARRID>AB</CARRID> 
    <CARRNAME>Air Berlin</CARRNAME> 
    <CURRCODE>EUR</CURRCODE> 
    </ZSCARR_LINE> 
    <ZSCARR_LINE> 
    <CARRID>AC</CARRID> 
    <CARRNAME>Air Canada</CARRNAME> 
    <CURRCODE>CAD</CURRCODE> 
    </ZSCARR_LINE> 
    <ZSCARR_LINE> 
    <CARRID>AF</CARRID> 
    <CARRNAME>Air France</CARRNAME> 
    <CURRCODE>EUR</CURRCODE> 
    </ZSCARR_LINE> 
</FLIGHT_TABLE> 

результат будет:

Data-[{CARRID,CARRNAME,CURRCODE},{AA,American Airlines,USD},{AB,Air Berlin,EUR},{AC,Air Canada,CAD},{AF,Air France,EUR}] 
+0

Спасибо Майкл за ваш ответ. Этот код не дает выход вообще ... Это мой код DATA: lt_table TYPE TABLE of zscarr_line. DATA: xml_string ТИП xstring. SELECT * FROM scarr INTO CORRESPONDING FIELDS TABLE lt_table. ИСПОЛЬЗОВАНИЕ ВЫЗОВА zflight ИСТОЧНИК flight_table = lt_table RESULT XML xml_string. lref_json_writer = cl_sxml_string_writer => create (type = if_sxml => co_xt_json). call Transformation zkxslt Источник Xml xml_string Результат Xml xml_string. В ZKXSLT ID я сохранил код, который вы опубликовали, но не дает выход. –

+0

@kishorebabu Вышеупомянутый XSLT-код преобразует входной документ XML в запрошенный формат - см. Http: //xsltransform.net/bFDb2C8. Если у вас возникли проблемы с инициированием преобразования XSL в вашем приложении, опубликуйте отдельный вопрос об этом. - P.S. Пожалуйста, не публикуйте код в комментариях - отредактируйте свой вопрос вместо этого. –

+0

Вышеупомянутый код, который вы упомянули, работал на меня ... но как я могу получить исходный XML-файл из получаемого нами результата. Какой подход я должен соблюдать. –

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