XSLT Multiple Child - PullRequest
       4

XSLT Multiple Child

0 голосов
/ 28 сентября 2019

У меня есть XML, который имеет несколько дочерних элементов.Группа товаров будет только один раз и может иметь минимум или больше транзакций для каждого Item_Entry.Другими словами, Item_Entry будет иметь только одну Item_Group, но может иметь еще одну транзакцию.Мне нужно сгенерировать вывод на основе транзакции.Мой вывод должен содержать все транзакции для каждого элемента.Мне нужна помощь с XSLT для этого.

XML:

<?xml version='1.0' encoding='UTF-8'?>
<Item_Data>
<Item_Entry>
    <Item_group>
        <Item_Name>Name1</Item_Name>
        <Item_ID>0001</Item_ID>
        <Sale_Date>2019-01-01-00:00</Sale_Date>
    </Item_group>
    <Transaction>
        <TxnCode Description="Store1">
            <Store type="StoreNum">1001</Store>
        </TxnCode>
        <SalesTime>2019-01-01-07:00</SalesTime>
        <SaleAmount>10</SaleAmount>
    </Transaction>
    <Transaction>
        <TxnCode Description="Store2">
            <Store type="StoreNum">1002</Store>
        </TxnCode>
        <SalesTime>2019-01-01-08:00</SalesTime>
        <SaleAmount>11</SaleAmount>
    </Transaction>
</Item_Entry>
<Item_Entry>
    <Item_group>
        <Item_Name>Name2</Item_Name>
        <Item_ID>0002</Item_ID>
        <Sale_Date>2019-01-02-00:00</Sale_Date>
    </Item_group>
    <Transaction>
        <TxnCode Description="Store3">
            <Store type="StoreNum">1003</Store>
        </TxnCode>
        <SalesTime>2019-01-02-09:00</SalesTime>
        <SaleAmount>12</SaleAmount>
    </Transaction>
    <Transaction>
        <TxnCode Description="Store4">
            <Store type="StoreNum">1004</Store>
        </TxnCode>
        <SalesTime>2019-01-02-10:00</SalesTime>
        <SaleAmount>13</SaleAmount>
    </Transaction>
 </Item_Entry>
</Item_Data>

Вывод:

Item_ID,Item_Name,Sale_Date,Store_Name,Store_Num,Sales_Time,Sale_Amount
0001,Name1,2019-01-01,Store1,1001,2019-01-01-07:00,10
0001,Name1,2019-01-01,Store2,1002,2019-01-01-08:00,11
0002,Name2,2019-01-02,Store3,1003,2019-01-01-09:00,12
0002,Name2,2019-01-02,Store4,1004,2019-01-01-10:00,13

Спасибо, уг

1 Ответ

0 голосов
/ 28 сентября 2019

Для преобразования XML в CSV или одной «записи» на строку я думаю (по крайней мере, в XSLT 2/3) легко вставить соответствующий элемент, представляющий «запись» или строку в шаблон (т.е. в вашем случае *)1001 *), а затем там, чтобы собрать все данные, которые вы хотите вывести при выборе xsl:value-of с правом separator например

<?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"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
      <xsl:text>Item_ID,Item_Name,Sale_Date,Store_Name,Store_Num,Sales_Time,Sale_Amount&#10;</xsl:text>
      <xsl:apply-templates select="//Transaction"/>
  </xsl:template>

  <xsl:template match="Transaction">
      <xsl:value-of select="../Item_group!(Item_ID, Item_Name, substring(Sale_Date, 1, 10)), */@* | .//*[not(*)]" separator=","/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty -development.net /jz1PuNX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...