Вставка тегов в мыльный заголовок с помощью XSLT - PullRequest
0 голосов
/ 26 августа 2009

Я обрабатываю файл ответов мыла, и наше требование заключается в добавлении определенных данных, полученных во время запроса, к ответу. У меня есть этот ответ XML и здесь, как добавить определенные данные в часть заголовка с помощью файла XSLT. Пожалуйста посоветуй.

Фактический ответ

<soap:Envelope xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <wsse:Security>
         <wsu:Timestamp wsu:Id="Timestamp-7cd6d5e5">
            <wsu:Created>2009-08-26</wsu:Created>
         </wsu:Timestamp>
      </wsse:Security>
   </soap:Header>
   <soap:Body>
      <GetProxy>
         <ProxiesList/>
      </GetProxy>
   </soap:Body>
</soap:Envelope> 

Нужен xslt, чтобы преобразовать это в

<soap:Envelope xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <wsse:Security>
         <wsu:Timestamp wsu:Id="Timestamp-7cd6d5e5">
            <wsu:Created>2009-08-26</wsu:Created>
         </wsu:Timestamp>
      </wsse:Security>
       <ut:reqCode xmlns:ut="temp.org">
       <ut:reqInfo>information from request</ut:reqInfo>
       </ut:reqCode>
   </soap:Header>
   <soap:Body>
      <GetProxy>
         <ProxiesList/>
      </GetProxy>
   </soap:Body>
</soap:Envelope>

Я ценю вашу помощь. Спасибо

1 Ответ

3 голосов
/ 26 августа 2009

Полезный шаблон для вставки вещей в XML - использовать преобразование идентичности для копирования всего и просто переопределить его для тегов, которые вы хотите изменить:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                version="1.0">
  <xsl:output method="xml"
              indent="yes"/>

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

  <!-- special handling for soap:Header -->
  <xsl:template match="soap:Header">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>

      <!-- insert the following inside the soap:Header tag -->
      <ut:reqCode xmlns:ut="temp.org">
        <ut:reqInfo>information from request</ut:reqInfo>
      </ut:reqCode>

    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Это в основном просто копирует все, но для soap:Header после копирования его содержимого добавляет некоторый дополнительный контент.

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