Поскольку наша компания переходит от AX к SAP, я также делаю «переход» от визуальной студии к затмению.Я подумал, что было бы неплохо начать с небольшого xslt-проекта, но, пробуя мой существующий (сделанный в VS) xsl, я заметил некоторые различия.
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice"> <xsl:output method="xml" indent="yes" /> <xsl:strip-space elements="*" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <xsl:template match="msxsl:SalesType"> <xsl:choose> <xsl:when test="(../msxsl:SalesType) = 'ReturnItem'"> <xsl:element name="MessageType" namespace="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice">384</xsl:element> </xsl:when> <xsl:otherwise> <xsl:element name="MessageType" namespace="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice">380</xsl:element> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Создает выходной xml с префиксом msxsl xmlns: msxsl= "http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice">380:
<?xml version="1.0" encoding="UTF-8"?> <Envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"> <Header> <MessageId>{0E415D3C-6D46-4E4E-B8CA-9729B11BA}</MessageId> <SourceEndpoint>BAB</SourceEndpoint> <DestinationEndpoint>INVOIC_WKMP</DestinationEndpoint> <Action>http://schemas.microsoft.com/dynamics/2008/01/services/SalesSalesInvoiceService/read </Action> </Header> <Body> <MessageParts> <SalesInvoice xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice"> <CustInvoiceJour class="entity"> <AccountcategoryId>FFF</AccountcategoryId> <msxsl:MessageType xmlns:msxsl="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice">380</msxsl:MessageType> </CustInvoiceJour> </SalesInvoice> </MessageParts> </Body> </Envelope>
Принимая во внимание, что Visual Studio xsl опускает спецификацию xmlns: msxsl (это правильно):
<?xml version="1.0" encoding="utf-8"?> <Envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"> <Header> <MessageId>{0E415D3C-6D46-4E4E-B8CA-9729B11BA}</MessageId> <SourceEndpoint>BAB</SourceEndpoint> <DestinationEndpoint>INVOIC_WKMP</DestinationEndpoint> <Action>http://schemas.microsoft.com/dynamics/2008/01/services/SalesSalesInvoiceService/read</Action> </Header> <Body> <MessageParts> <SalesInvoice xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice"> <CustInvoiceJour class="entity"> <AccountcategoryId>FFF</AccountcategoryId> <MessageType>380</MessageType> </CustInvoiceJour> </SalesInvoice> </MessageParts> </Body> </Envelope>
, поскольку она уже находится в пространстве имен http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice IЯ не хочу этого дополнения здесь. Могу ли я что-нибудь сделать, чтобы изменить это в затмении?
С уважением,
Майк
Нет, Visual Studio НЕ подходит для пропуска этого пространства имен.Если вы не хотите, чтобы оно было включено, вы должны явно опустить его, используя xsl:exclude-result-prefixes="msxsl".
xsl:exclude-result-prefixes="msxsl"