Преобразование исходящих XML-данных Dynamics Axe
Этот xml генерируется из Dynamics Ax, который нуждается в преобразовании (XSLT): необходимо создать XSLT, чтобы получить целевой исходящий xml-файл
<?xml version="1.0" encoding="UTF-16"?>
<Envelope xmlns="http://schemas.microsoft.com/dynamics/2011/01/documents/Message">
<Header>
<MessageId>{3BCFB0D6-EAB4-430E-9921-E365F189046D}</MessageId>
<Action>http://schemas.microsoft.com/dynamics/2008/01/services/LedgerExchangeRateService/read</Action>
</Header>
<Body>
<MessageParts xmlns="http://schemas.microsoft.com/dynamics/2011/01/documents/Message">
<LedgerExchangeRate xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/LedgerExchangeRate">
<SenderId>Womar</SenderId>
<CurrencyPair class="entity">
<FromCurrencyCode>US</FromCurrencyCode>
<ToCurrencyCode>DKK</ToCurrencyCode>
<ExchangeRateType>Default</ExchangeRateType>
<ExchangeRateDisplayFactor>Hundred</ExchangeRateDisplayFactor>
<ExchangeRate class="entity">
<ExchangeRate>500.000000000000</ExchangeRate>
<ValidFrom>2013-05-17</ValidFrom>
</ExchangeRate>
<RateType class="entity">
<Name>Default</Name>
</RateType>
</CurrencyPair>
</LedgerExchangeRate>
</MessageParts>
</Body>
</Envelope>
После преобразования файл будет выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<exchangeRateImport action="create" xmlns="http://schemas.v.com/2005/ImosOps" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<baseCurrency>US</baseCurrency>
<currency>EU</currency>
<rate>55.00000000</rate>
<effectiveDate>2013-05-17</effectiveDate>
</exchangeRateImport>
Я создал XLRT следующим образом, что приводит к разным результатам. Пожалуйста помоги.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:axEnv="http://schemas.microsoft.com/dynamics/2011/01/documents/Message"
xmlns:axExchRate="http://schemas.microsoft.com/dynamics/2008/01/documents/LedgerExchangeRate">
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no"/>
<xsl:template match="/">
<exchangeRateImport imosMsg:action="update" xmlns:imosMsg="http://schemas.veson.com/2005/ImosMsg" xmlns="http://schemas.veson.com/2005/ImosOps" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<baseCurrency>
<xsl:value-of select="axEnv:Envelope/axEnv:body/axEnv:MessageParts/axExchRate:LedgerExchangeRate/axExchRate:CurrencyPair/axExchRate:FromCurrencyCode"/>
</baseCurrency>
<currency/>
<rate/>
<effectiveDate/>
</exchangeRateImport>
</xsl:template>
</xsl:stylesheet>
Результат:
<exchangeRateImport imosMsg:action="update" xmlns="http://schemas.veson.com/2005/ImosOps" xmlns:imosMsg="http://schemas.veson.com/2005/ImosMsg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:axEnv="http://schemas.microsoft.com/dynamics/2011/01/documents/Message" xmlns:axExchRate="http://schemas.microsoft.com/dynamics/2008/01/documents/LedgerExchangeRate"><baseCurrency></baseCurrency><currency /><rate /><effectiveDate /></exchangeRateImport>
1 ответ
Решение
Основная причина, по которой ваше преобразование не работает, заключается в том, что axEnv:body
элемент не найден, потому что он имеет капитал B
в исходном XML.
Я не до конца понимаю, что вам нужно, поскольку XML-код, который, как вы говорите, вам нужен, почти не соответствует исходным данным. Однако вот мое лучшее предположение. Я надеюсь, что это помогает.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:axEnv="http://schemas.microsoft.com/dynamics/2011/01/documents/Message"
xmlns:axExchRate="http://schemas.microsoft.com/dynamics/2008/01/documents/LedgerExchangeRate"
exclude-result-prefixes="axEnv axExchRate">
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no"/>
<xsl:template match="/">
<xsl:apply-templates select="axEnv:Envelope/axEnv:Body/axEnv:MessageParts/axExchRate:LedgerExchangeRate/axExchRate:CurrencyPair"/>
</xsl:template>
<xsl:template match="axExchRate:CurrencyPair">
<exchangeRateImport
imosMsg:action="update"
xmlns="http://schemas.veson.com/2005/ImosOps"
xmlns:imosMsg="http://schemas.veson.com/2005/ImosMsg"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<baseCurrency>
<xsl:value-of select="axExchRate:FromCurrencyCode"/>
</baseCurrency>
<currency>
<xsl:value-of select="axExchRate:ToCurrencyCode"/>
</currency>
<rate>
<xsl:value-of select="axExchRate:ExchangeRate/axExchRate:ExchangeRate"/>
</rate>
<effectiveDate>
<xsl:value-of select="axExchRate:ExchangeRate/axExchRate:ValidFrom"/>
</effectiveDate>
</exchangeRateImport>
</xsl:template>
</xsl:stylesheet>
выход
<?xml version="1.0" encoding="utf-8"?>
<exchangeRateImport
xmlns="http://schemas.veson.com/2005/ImosOps"
xmlns:imosMsg="http://schemas.veson.com/2005/ImosMsg"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
imosMsg:action="update">
<baseCurrency>US</baseCurrency>
<currency>DKK</currency>
<rate>500.000000000000</rate>
<effectiveDate>2013-05-17</effectiveDate>
</exchangeRateImport>