#xml #xslt #dynamic
#xml #xslt #динамический
Вопрос:
Ввод источника
<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical">
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA">
<Field Value="CO Last Name" Datatype="String" Name="ContractingOfficerLastName">
</LetterInstance>
</SiebelMessage>
Ожидаемый результат:
<?xml version="1.0" encoding="UTF-8"?>
<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical">
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA">
<ContractingOfficerLastName>CO Last Name</ContractingOfficerLastName>
<PONumber>POTest000001</PONumber>
</LetterInstance>
</SiebelMessage>
В основном получаем значение атрибута Name элемента Field и создаем новый элемент, а затем получаем значение атрибута «Value» и используем его как значение нового элемента.
Комментарии:
1. Откуда
<PONumber>
берется? Кроме того, вашField
элемент во входных данных неправильно сформирован.
Ответ №1:
Эта таблица стилей XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Field">
<xsl:element name="{@Name}">
<xsl:value-of select="@Value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Применяется к правильно сформированным входным данным:
<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical">
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA">
<Field Value="CO Last Name" Datatype="String" Name="ContractingOfficerLastName"/>
</LetterInstance>
</SiebelMessage>
Производит:
<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical">
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA">
<ContractingOfficerLastName>CO Last Name</ContractingOfficerLastName>
</LetterInstance>
</SiebelMessage>
Я не уверен, откуда <PONumber>
должно быть сгенерировано.
Комментарии:
1. Решение сработало как шарм. Я перепутал исходный и целевой ввод при попытке скопировать вставить в окно … не могу отблагодарить вас за это…
Ответ №2:
Что-то в этом роде, если я вас правильно понимаю:
<xsl:element name="name()">
<xsl:value-of select="./text()" />
</xsl:element>