Преобразование XSLT - имена динамических элементов - PullRequest
6 голосов
/ 28 октября 2011

Источник ввода

<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» и используем его в качестве значения нового элемента.

Ответы [ 2 ]

13 голосов
/ 28 октября 2011

Эта таблица стилей 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> должен быть сгенерирован.

0 голосов
/ 28 октября 2011

Что-то в этом роде, если я вас правильно понимаю:

<xsl:element name="name()">
 <xsl:value-of select="./text()" />
</xsl:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...