XSLT-преобразование -AIF Dynamics AX

Я пытаюсь преобразовать следующий XML в другой формат XML. Я скопировал файл XSLT, который я использую для преобразования, однако получаю неверную ошибку схемы.

<?xml version="1.0" encoding="utf-8" ?>
 <?xml-stylesheet type="text/xsl" href="InternalVendGroup.xslt"?>
 <ns0:VendorGroup xmlns:ns0="http://InternalVendorGroup">
   <Header>
     <Fld1>VendGroup1</Fld1>
    <Fld2>VendGroup Description</Fld2>
     <MessageId>{5FC77A8F-67D2-4BF1-A671-FF5A81EF0DDC}</MessageId>
   </Header>
 </ns0:VendorGroup>

Код XSLT-преобразования:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:InternalSO="http://InternalVendGroup">
  <xsl:template match="InternalSO:AxdVendGroup">
    <Envelope xmlns="http://schemas.microsoft.com/dynamics/2011/01/documents/Message">
      <Header>
        <MessageId>
          <xsl:value-of select="Header/MessageId"/>
        </MessageId>
        <Action>http://schemas.microsoft.com/dynamics/2008/01/services/VendVendGroupService/create</Action>
      </Header>
      <Body>
        <MessageParts>
          <AxdVendGroup xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/VendGroup">
            <VendGroup class="entity">
              <VendGroup>
                <xsl:value-of select="Header/Fld1"/>
              </VendGroup>
              <Name>
                <xsl:value-of select="Header/Fld2" />
              </Name>
            </VendGroup>
          </AxdVendGroup>
        </MessageParts>
      </Body>
    </Envelope>
  </xsl:template>
</xsl:stylesheet>

После преобразования я получаю следующее, что не является желаемым результатом.

<?xml version="1.0" encoding="utf-8"?>



    VendGroup1

   VendGroup Description

    {5FC77A8F-67D2-4BF1-A671-FF5A81EF0DDC}

Почему все теги отсутствуют во время преобразования?

1 ответ

Решение

Почему все теги отсутствуют во время преобразования?

Потому что ваш шаблон ничего не соответствует.

<xsl:template match="InternalSO:AxdVendGroup">

Это ничего не соответствует, потому что:

  1. Там нет элемента с именем AxdVendGroup в вашем XML; правильное имя VendorGroup;
  2. Вы связали InternalSO: префикс к"http://InternalVendGroup" Пространство имен; но пространство имен, используемое вашим вводом XML "http://InternalVendorGroup",

Попробуйте вместо этого:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:InternalSO="http://InternalVendorGroup">

<xsl:template match="InternalSO:VendorGroup">
    <!-- the rest of your template -->
</xsl:template>

</xsl:stylesheet>

Предостережение: я не изучал фактическое содержание вашего шаблона.

Другие вопросы по тегам