XSLT. Как сделать 2 изменения для 1 элемента? Заказ и переименование - PullRequest
0 голосов
/ 16 апреля 2020

Мне нужно изменить порядок элементов. Но также переименуйте элементы в элементы. Итак, у меня есть xml:

<transactionality>
                  <rollbackexttransactionid>
                     <rollbackvalidity>3600</rollbackvalidity>
                     <rollbackscheduledattemps>3</rollbackscheduledattemps>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbackexttransactionid>
                  <transactionalitylogspath>TransactionalityLogs</transactionalitylogspath>
                  <rollbacklifecycleevents>
                     <rollbacklifecycle>1200</rollbacklifecycle>
                     <rollbackscheduledattemps>2</rollbackscheduledattemps>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbacklifecycleevents>
                  <rollbackpayment>
                     <rollbackvalidity>1200</rollbackvalidity>
                     <rollbackscheduledattemps>2</rollbackscheduledattemps>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbackpayment>
               </transactionality>
  1. Мне нужно сделать элементactionalitylogspath первым в транзакционности.
  2. Переименовать все элементы в «rollbackscheduledattemps» в «rollbackscheduledattempts»
  3. Переименовать rollbacklifecycleeevents / rollback lifecycle в rollbacklifecycleeevents / rollbackvalidity

Я хотел бы иметь:

<transactionality>
                  <transactionalitylogspath>TransactionalityLogs</transactionalitylogspath>
                  <rollbackexttransactionid>
                     <rollbackvalidity>3600</rollbackvalidity>
                     <rollbackscheduledattempts>3</rollbackscheduledattempts>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbackexttransactionid>
                  <rollbacklifecycleevents>
                      <rollbackvalidity>1200</rollbackvalidity>
                      <rollbackscheduledattempts>2</rollbackscheduledattempts>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbacklifecycleevents>
                  <rollbackpayment>
                     <rollbackvalidity>1200</rollbackvalidity>
                      <rollbackscheduledattempts>2</rollbackscheduledattempts>
                     <manualcorrectionpath>TransactionalityLogs</manualcorrectionpath>
                  </rollbackpayment>
               </transactionality>

Я сделал:

<xsl:template match="transactionality">
    <xsl:variable name="elements-after" select="rollbackexttransactionid|rollbacklifecycleevents|rollbackpayment"/>
    <xsl:copy>
        <xsl:copy-of select="transactionalitylogspath"/>
        <xsl:copy-of select="$elements-after">
        </xsl:copy-of >

    </xsl:copy>
</xsl:template>
            <xsl:template match="rollbackscheduledattemps">
                <rollbackscheduledattempts>
                    <xsl:apply-templates select="@* | node()"/>
                </rollbackscheduledattempts>
            </xsl:template>

байт это не работает :(. Помогите мне, пожалуйста.

1 Ответ

0 голосов
/ 16 апреля 2020

Вот как я бы это сделал:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="transactionality">
    <xsl:copy>
        <xsl:apply-templates select="transactionalitylogspath"/>
        <xsl:apply-templates select="*[local-name() != 'transactionalitylogspath']"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="rollbackscheduledattemps">
      <rollbackscheduledattempts>
          <xsl:value-of select="."/>
      </rollbackscheduledattempts>
  </xsl:template>

  <xsl:template match="rollbacklifecycleevents/rollbacklifecycle">
      <rollbackvalidity>
          <xsl:value-of select="."/>
      </rollbackvalidity>
  </xsl:template>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Вот рабочий пример: https://xsltfiddle.liberty-development.net/6pS26mL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...