Дополнительное пространство имен в xsl output eclipse - PullRequest
0 голосов
/ 26 мая 2018

Поскольку наша компания переходит от 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Я не хочу этого дополнения здесь. Могу ли я что-нибудь сделать, чтобы изменить это в затмении?

С уважением,

Майк

1 Ответ

0 голосов
/ 26 мая 2018

Нет, Visual Studio НЕ подходит для пропуска этого пространства имен.Если вы не хотите, чтобы оно было включено, вы должны явно опустить его, используя xsl:exclude-result-prefixes="msxsl".

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