Замена конкретного символа строчными с помощью xsl - PullRequest
1 голос
/ 28 июля 2011

Привет, у меня есть xml, как показано ниже.

<setField identifier=”2”>
      <fieldValues>
       <fieldValue>
        <field>event</field>
        <value>
         <boundVariable>$event1</boundVariable>
        </value>
        <type>java.lang.String</type>
       </fieldValue>
      </fieldValues>
      <variable>append</variable>
     </setField>

Мне нужно конвертировать в следующий формат.

<freeForm><text>append.setEvent($event1);</freeForm></text>

Я пытаюсь использовать следующий подход.

   <xsl:template match="setField" name="setFieldTemplate">
   <xsl:element name="freeForm">                    
   <xsl:element name="text">   
   <xsl:value-of select="variable" />
   <xsl:text>.set</xsl:text>
   <xsl:value-of select="concat(translate(substring(field, 1, 1)"/>
   <xsl:text>(</xsl:text>
   <xsl:value-of select="boundVariable"/>
   <xsl:text>);</xsl:text>
   </xsl:element>
   </xsl:element>
   </xsl:template>

Здесь мое требование основано на имени поля, мне нужно сгенерировать соответствующий оператор, как показано ниже. Для этого мне нужно изменить первый символ имени поля на верхний при генерации в следующем формате.

append.setEvent ($ event1);

Здесь именем поля является «событие», и мне нужно сгенерировать setEvent (для которого я объединяюсь со строкой «set»). Но мне нужно сначала изменить имя полябуква в верхнюю (событие из события). Когда я пытаюсь использовать приведенный выше шаблон с функцией перевода, я сталкиваюсь с недопустимым выражением xpath.

Пожалуйста, предоставьте мне несколько указателей, чтобы сделать то же самое.

Ответы [ 2 ]

0 голосов
/ 28 июля 2011
<xsl:value-of select="concat(
                variable,
                '.set',
                translate(substring(//field, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
                substring(//field, 2),
                '(',
                //boundVariable,
                ');'
                )"/>
0 голосов
/ 28 июля 2011

Вы хотите:

            <xsl:value-of select="concat(
                translate(substring(//field, 1, 1),
                'abcdefghijklmnstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
                substring(//field, 2))"/>

Также вы можете предпочесть:

<xsl:template match="setField">
    <freeForm>                    
        <text>   
            <xsl:value-of select="variable" />
            <xsl:text>.set</xsl:text>
            <xsl:value-of select="concat(
                translate(
                 substring(fieldValues/fieldValue/field, 1, 1),
                 'abcdefghijklmnstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
                substring(fieldValues/fieldValue/field, 2),
                '(',fieldValues/fieldValue/value/boundVariable,');')"/>                   
        </text>
    </freeForm> 
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...