XSLT альтернативный вывод синтаксического анализа в зависимости от определенного значения атрибута

#xml #templates #xslt #xslt-1.0

#xml #шаблоны #xslt #xslt-1.0

Вопрос:

У меня есть следующее XML-сообщение, которое мне нужно в парах имя / значение, и мне нужно заполнить определенные значения, только если в атрибуте name тега extendedDataElements присутствует значение «Оплата». Если значение равно «Оплата», то:

  • Создается новое имя / пара со статусом в качестве имени и значением, являющимся данными, которые находятся в situationQualifier
  • Затем situationQualifier заполняется некоторым статическим значением, которое я буду жестко кодировать
  • Затем тег amount в имени / значении изменяется на trnAmount с соответствующим значением.

Если значение атрибута name отличается от «Payment», то он просто возвращается к базовому преобразованию «element_attribute=value,». Я выполнил базовое преобразование, чтобы перейти к парам значений name, но у меня возникли большие проблемы с условным шагом для применения этих изменений на основе этого значения extendedDataElements.

Спасибо за любую помощь.

XML

     <cbe:CommonBaseEvent>
    <sourceComponentId component="28591" />
    <situationInformation extensionName="Payment">
      <extendedDataElements name="Payment">
        <children name="amount">
          <values>100</values>
        </children>
      </extendedDataElements>
      <situationType situationQualifier="PaymentCompletionReceived" reasoningScope="INFO"/>
    </situationInformation>
</cbe:CommonBaseEvent>
  

Желаемый результат:

 sourceComponentId_component=28591, extendedDataElements_name=Channel, trnAmount=100, Status=PaymentCompletionReceived, situationType_situationQualifier=StaticValueHere, situationType_reasoningScope=INFO
  

Ответ №1:

Вы пытались определить шаблон, подобный приведенному ниже, для определения пользовательской обработки данных? Я думаю, что он должен идеально справиться с этим случаем. Это декларативный способ решения проблемы.

 <xsl:template match="extendedDataElements[@name='Payment']">

</xsl:template>