Преобразование XML в XML с использованием XSL (XSLT) и API - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть входной xml, как показано ниже

<node>
    <id>1234</id>
    <value1>DoNoChange</value1>
    <value2></value2>
    <value3></value3>
</node>

Теперь я бы использовал XSL для преобразования вышеуказанного XML в ниже одного

<node>
    <id>1234</id>
    <value1>DoNoChange</value1>
    <value2>NewValue2</value2>
    <value2>NewValue3</value2>
</node>

Какие NewValue2 и NewValue3 являются ответомсодержимое от вызовов API, таких как http://example.com/api/getDataByID/1234, которые будут возвращать ответ как

<data>
   <value2>NewValue2</value2>
   <value3>NewValue3</value3>
<data>

Не могли бы вы посоветовать мне, как можно построить для него XSL?

Что я пробовалпока

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

 <xsl:param name="code" select="1234"/>

 <xsl:variable name="endpoint" as="xs:string" select="'http://example.com/api/getDataByID/1'"/>
      <!-- the http request element -->
      <xsl:variable name="request">
         <http-request method="get" mime-type="application/xml" content-type="application/xml">

         </http-request>
      </xsl:variable>

 <xsl:template match="node/id">    
  <xsl:variable name="rest_response" select="ex:httpSend($request, $endpoint)"/>
  <id><xsl:value-of select="$rest_response/data"/></id>
 </xsl:template>

</xsl:stylesheet>

Логика, которую я пытаюсь сделать, это

  • Когда я вижу совпадение узла / id
  • Я буду вызывать API, используя «id» в качестве параметра для Rest API (метод Get) (Примечание: в настоящее время я не знаю, как использовать id в качестве param, я до сих пор жестко запрограммирован)
  • Захватите ответ API в переменную. Заполните переменные данными в таких полях, как «value2», value3 »(Примечание: это я не знаю, как это сделать)

Спасибо,

1 Ответ

0 голосов
/ 21 февраля 2019

Если ваш вызов API возвращает ответ XML, вы должны иметь возможность сделать что-то вроде:

XSLT 1.0

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

<xsl:template match="/node">
    <xsl:copy>
        <xsl:copy-of select="id | value1"/>
        <xsl:variable name="response" select="document(concat('http://example.com/api/getDataByID/', id))" />
        <value2>
            <xsl:value-of select="$response/data/value2"/>
        </value2>
        <value3>
            <xsl:value-of select="$response/data/value3"/>
        </value3>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Не проверено, поскольку среда тестирования не была предоставлена.

...