Из системы CRM я получаю XML в предопределенной структуре со всеми ее элементами. Мой клиент хочет импортировать сгенерированный XML в свою ERP, но его необходимо реструктурировать, чтобы он соответствовал их системе. Я смог преобразовать его так, как они хотят, используя XSLT. Тем не менее, я не могу добавить атрибуты для элемента (см. Код ниже для более подробной информации). Кто-нибудь знает, как я могу жестко запрограммировать это в своем XSLT, чтобы я получил желаемый результат в XML?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="com.cisag.app.sales.obj.SalesOrder"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:import-schema schema-location="SALESORDER.xsd"
namespace="com.cisag.app.sales.obj.SalesOrder"/>
<xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8"/>
<xsl:variable name="dateTime" select="//ActionDateTime"/>
<xsl:variable name="date" select="concat(substring($dateTime,9,2), '#',
substring($dateTime,6,2), '#', substring($dateTime,1,4))"/>
<xsl:template match="/">
<xsl:element name="semiramis">
<xsl:element name="SalesOrder">
<xsl:element name="Type">
<xsl:element name="code">
<xsl:value-of select="105"/>
</xsl:element>
</xsl:element>
<xsl:element name="invoicingPartyData">
<xsl:element name="Partner">
<xsl:element name="number">
<xsl:value-of select="0"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="customerOrderData">
<xsl:element name="purchaseOrder">
<xsl:value-of select="//WrntyID"/>
</xsl:element>
<xsl:element name="date">
<xsl:value-of select="$date"/>
</xsl:element>
</xsl:element>
<xsl:element name="imp_description">
<xsl:value-of select="//Remark"/>
</xsl:element>
<xsl:element name="customerData">
<xsl:element name="CustomerPartner">
<xsl:element name="number">
<xsl:value-of select="//AccountExternalID"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="discountOriginType">
<xsl:value-of select="('MANUAL')"/>
</xsl:element>
<xsl:element name="discounts">
<xsl:element name="type">
<xsl:value-of select="('PERCENT_VALUE')"/>
</xsl:element>
<xsl:element name="value">
<xsl:value-of select="//DiscountPercentage"/>
</xsl:element>
<xsl:element name="DiscountType">
<xsl:element name="code">
<xsl:value-of select="200"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:for-each select="//TransactionLine">
<xsl:element name="Details">
<xsl:element name="Item">
<xsl:element name="number">
<xsl:value-of select="//ItemExternalID"/>
</xsl:element>
</xsl:element>
<xsl:element name="totalQuantity">
<xsl:element name="amount">
<xsl:value-of select="//UnitsQuantity"/>
</xsl:element>
<xsl:element name="Uom">
<xsl:element name="code">
<xsl:value-of
select="//ItemTSABasiseinheit"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="priceOriginType">
<xsl:value-of select="('MANUAL')"/>
</xsl:element>
<xsl:element name="grossPrice">
<xsl:element name="amount">
<xsl:value-of select="//TSAPreisvorRabatt"/>
</xsl:element>
<xsl:element name="Currency">
<xsl:element name="isoCode">
<xsl:value-of select="('EUR')"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:choose>
<xsl:when test="//TSAZeilenrabatt">
<xsl:element name="discounts">
<xsl:element name="type">
<xsl:value-of select="
('PERCENT_VALUE')"/>
</xsl:element>
<xsl:element name="value">
<xsl:value-of
select="//TSAZeilenrabatt"/>
</xsl:element>
<xsl:element name="DiscountType">
<xsl:element name="code">
<xsl:value-of select="200"/>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:when>
</xsl:choose>
<xsl:element name="imp_deliveryDate">
<xsl:element name="dateFrom">
<xsl:element name="specialValue">
<xsl:value-of select="('NONE')"/>
</xsl:element>
<xsl:element name="date">
<xsl:value-of select="//DeliveryDate"/>
</xsl:element>
<xsl:element name="timeZone">
<xsl:value-of select="('CET')"/>
</xsl:element>
</xsl:element>
<xsl:element name="dateUntil">
<xsl:element name="specialValue">
<xsl:value-of select="('NONE')"/>
</xsl:element>
<xsl:element name="date">
<xsl:value-of select="//TSALieferdatumBis"/>
</xsl:element>
<xsl:element name="timeZone">
<xsl:value-of select="('CET')"/>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Вот что я ожидаю получить:
<?xml version="1.0" encoding="UTF-8"?>
<semiramis xmlns="com.cisag.app.sales.obj.SalesOrder"
xsi:schemaLocation="com.cisag.app.sales.obj.SalesOrder SALESORDER.xsd"
created="2014-04-16T14:03:28.256Z" locale="en-US-XMLSchemaCompliant"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
nlsMode="SINGLE_LANGUAGE" dateTimeMode="NORMALIZED">
<SalesOrder xmlns="com.cisag.app.sales.obj.SalesOrder">
<Type>
<code></code>
</Type>
<invoicingPartyData>
<Partner>
<number></number>
</Partner>
</invoicingPartyData>
<customerOrderData>
<purchaseOrder></purchaseOrder>
<date>08#01#2019</date>
</customerOrderData>
<imp_description></imp_description>
<customerData>
<CustomerPartner>
<number></number>
</CustomerPartner>
</customerData>
<discountOriginType>MANUAL</discountOriginType>
<discounts>
<type>PERCENT_VALUE</type>
<value>0</value>
<DiscountType>
<code>199</code>
</DiscountType>
</discounts>
<Details>
<Item>
<number>010</number>
</Item>
<totalQuantity>
<amount>900</amount>
<Uom>
<code></code>
</Uom>
</totalQuantity>
<priceOriginType>MANUAL</priceOriginType>
<grossPrice>
<amount></amount>
<Currency>
<isoCode>EUR</isoCode>
</Currency>
</grossPrice>
<discounts>
<type>PERCENT_VALUE</type>
<value>13</value>
<DiscountType>
<code></code>
</DiscountType>
<MeasureUom />
<MeasureCurrency />
</discounts>
<imp_deliveryDate>
<dateFrom>
<specialValue>NONE</specialValue>
<date>2019-01-08</date>
<timeZone>CET</timeZone>
</dateFrom>
<dateUntil>
<specialValue>NONE</specialValue>
<date></date>
<timeZone>CET</timeZone>
</dateUntil>
</imp_deliveryDate>
</Details>
</SalesOrder>
</semiramis>
Вот что я на самом деле получаю:
<?xml version="1.0" encoding="utf-8"?>
<semiramis xmlns="com.cisag.app.sales.obj.SalesOrder">
<SalesOrder>
<Type>
<code></code>
</Type>
<invoicingPartyData>
<Partner>
<number></number>
</Partner>
</invoicingPartyData>
<customerOrderData>
<purchaseOrder></purchaseOrder>
<date>08#01#2019</date>
</customerOrderData>
<imp_description></imp_description>
<customerData>
<CustomerPartner>
<number></number>
</CustomerPartner>
</customerData>
<discountOriginType>MANUAL</discountOriginType>
<discounts>
<type>PERCENT_VALUE</type>
<value>0</value>
<DiscountType>
<code>199</code>
</DiscountType>
</discounts>
<Details>
<Item>
<number>010</number>
</Item>
<totalQuantity>
<amount>900</amount>
<Uom>
<code></code>
</Uom>
</totalQuantity>
<priceOriginType>MANUAL</priceOriginType>
<grossPrice>
<amount></amount>
<Currency>
<isoCode>EUR</isoCode>
</Currency>
</grossPrice>
<discounts>
<type>PERCENT_VALUE</type>
<value>13</value>
<DiscountType>
<code></code>
</DiscountType>
<MeasureUom />
<MeasureCurrency />
</discounts>
<imp_deliveryDate>
<dateFrom>
<specialValue>NONE</specialValue>
<date>2019-01-08</date>
<timeZone>CET</timeZone>
</dateFrom>
<dateUntil>
<specialValue>NONE</specialValue>
<date></date>
<timeZone>CET</timeZone>
</dateUntil>
</imp_deliveryDate>
</Details>
</SalesOrder>
</semiramis>