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">
Это ничего не соответствует, потому что:
- Там нет элемента с именем
AxdVendGroup
в вашем XML; правильное имяVendorGroup
; - Вы связали
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>
Предостережение: я не изучал фактическое содержание вашего шаблона.