SAPфорум.RU https://www.sapboard.ru/forum/ |
|
xslt трансформация, чтобы распарсить xml файл. https://www.sapboard.ru/forum/viewtopic.php?f=13&t=97441 |
Страница 1 из 1 |
Автор: | skaa [ Вт, мар 12 2019, 11:34 ] |
Заголовок сообщения: | xslt трансформация, чтобы распарсить xml файл. |
Добрый день! Может кто подскажет: Есть xml файл в котором хранятся пришедшие заказы и их позиции. Хочу распарсить этот xml файл и получить на выходе заголовки и позиции пришедших заказов. Но почему-то при применении моей xslt-трансформации заполняются только таблица заголовков заказа, а вложенная таблица позиций не заполняется(lt_table01-lines). Пример входящего xml файла: Code: <?xml version="1.0" encoding="utf-8"?> <Root> <Order> <DOC_NUMBER>1</DOC_NUMBER> <DATE>2019-02-25</DATE> <Lines> <Line> <CODE>22</CODE> </Line> <Line> <CODE>23</CODE> </Line> </Lines> </Order> <DOC_NUMBER>2</DOC_NUMBER> <DATE>2019-02-25</DATE> <Lines> <Line> <CODE>24</CODE> </Line> </Lines> <Order> </Order> </Root> xslt трансформация: Code: <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" version="1.0"> <xsl:strip-space elements="*"/> <xsl:output indent="yes"/> <xsl:template match="Root"> <asx:abap version="1.0"> <asx:values> <TABLE01> <xsl:for-each select="Order"> <Line-Item> <DOC_NUMBER> <xsl:value-of select="DOC_NUMBER"/> </DOC_NUMBER> <DATE> <xsl:value-of select="DATE"/> </DATE> <Lines> <xsl:for-each select="Lines/Line"> <Line-Item> <CODE> <xsl:value-of select="CODE"/> </CODE> </Line-Item> </xsl:for-each> </Lines> </Line-Item> </xsl:for-each> </TABLE01> </asx:values> </asx:abap> </xsl:template> </xsl:transform> Программа abap: Code: TYPES : BEGIN OF ts_table02, code TYPE string, END OF ts_table02. DATA: BEGIN OF ls_table01, doc_number TYPE string, date TYPE string, lines TYPE TABLE OF ts_table02, END OF ls_table01. DATA lt_table01 LIKE TABLE OF ls_table01. DATA lt_table02 TYPE TABLE OF ts_table02. i_xslt = 'ZORDER'. TRY. ""Десериализация с помощью xslt трансформации CALL TRANSFORMATION (i_xslt) SOURCE XML lv_xml_content RESULT table01 = lt_table01. И на выходе вложенная таблица позиций не заполнена(lt_table01-lines). |
Автор: | skaa [ Вт, мар 12 2019, 14:54 ] |
Заголовок сообщения: | Re: xslt трансформация, чтобы распарсить xml файл. |
Разобрался, нельзя называть вложенную таблицу ключевым словом Lines. |
Автор: | ISergiv [ Чт, фев 13 2020, 11:02 ] |
Заголовок сообщения: | Re: xslt трансформация, чтобы распарсить xml файл. |
Здравствуйте, дамы и господа. Нужна ваша помощь. Использую простую трансформацию (ST) для формирования XML файла. Элементы файла должны содержать префикс области имен: <УТ2:ИНН> Трансформация выглядит так: Code: <?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/...-templates"> <tt:root name="SRCDATA"/> <tt:template> <ЭДПФР xmlns="http://пф.рф/...." xmlns:УТ2="http://пф.рф/..."> <СЗВ-ТД> <Работодатель> <УТ2:ИНН> <tt:value ref=".SRCDATA.INN"/> </УТ2:ИНН> <УТ2:КПП> <tt:value ref=".SRCDATA.KPP"/> </УТ2:КПП> </Работодатель> </СЗВ-ТД> </ЭДПФР> </tt:template> </tt:transform> на выходе имеем строку такого вида: Code: <ЭДПФР xmlns="http://пф.рф/...."> <СЗВ-ТД> <Работодатель> <УТ2:ИНН xmlns:УТ2="http://пф.рф/...">123456789012</УТ2:ИНН> <УТ2:КПП xmlns:УТ2="http://пф.рф/...">12345678</УТ2:КПП> </Работодатель> </СЗВ-ТД> </ЭДПФР> Как видно, описание области имен перемещается из первого элемента в каждый элемент, имеющий соответствующий префикс. Как побороть эту проблему, как получить на выходе формат, соответствующий трансформации с описанием области имен только в первом элементе? Спасибо. |
Автор: | Bimit [ Чт, фев 13 2020, 12:46 ] |
Заголовок сообщения: | Re: xslt трансформация, чтобы распарсить xml файл. |
как то так Code: <СЗВ-ТД>
<Работодатель> <УТ2:РегНомер> <xsl:value-of select=> </УТ2:РегНомер> <НаименованиеОрганизации> <xsl:value-of select=> </НаименованиеОрганизации> <УТ2:ИНН> <xsl:value-of select=> </УТ2:ИНН> <УТ2:КПП> <xsl:value-of select=> </УТ2:КПП> </Работодатель> </СЗВ-ТД> |
Автор: | ISergiv [ Чт, фев 13 2020, 14:40 ] |
Заголовок сообщения: | Re: xslt трансформация, чтобы распарсить xml файл. |
Уважаемый Bimit, спасибо за ответ. Скажите, а разве префикс xsl не относится к XSLT трансформациям? Я кажется нашел в хелпе, нужно в первом элементе указать explicit namespace declaration: <tt:namespace name="УТ2" /> Code: <?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/...-templates" xmlns:УТ2="http://пф.рф/..."> <tt:root name="SRCDATA"/> <tt:template> <ЭДПФР xmlns="http://пф.рф/...."> <tt:namespace name="УТ2" /> <СЗВ-ТД> <Работодатель> <УТ2:ИНН> <tt:value ref=".SRCDATA.INN"/> </УТ2:ИНН> ... </Работодатель> </СЗВ-ТД> </ЭДПФР> </tt:template> </tt:transform> |
Автор: | Bimit [ Пт, фев 14 2020, 10:20 ] |
Заголовок сообщения: | Re: xslt трансформация, чтобы распарсить xml файл. |
ISergiv написал(а): Уважаемый Bimit, спасибо за ответ. Скажите, а разве префикс xsl не относится к XSLT трансформациям? Конечно это XSLT тема так и называется Самое простое создать XML файл с помощью XSLT Code: <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |