2017-10-12 7 views
0

以下に示すように、与えられた入力xmlを出力に変換する方法。 wsse:Securityヘッダーを完全に削除して入力xmlを変換し、EventUser値をUsernameノード値で更新する必要があります。 私はxlstの下で試しました。入出力変換ノードと更新ノードを削除する

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="EventUser"> 
     <xsl:copy> 
      <xsl:value-of select="Username"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

入力 - -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
     <wsse:Security mustUnderstandValue="1" 
        xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:UsernameToken id="UsernameToken-274"> 
      <wsse:Username>MyUsername</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password> 
     </wsse:UsernameToken> 
     </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
     <axis2ns682:Create xmlns:axis2ns682="http://g22.test01.org/test02/RF"> 
     <tns:CreateDetails xmlns:tns="http://g22.test01.org/test02/RF"> 
      <tns:EventUser>Event</tns:EventUser> 
      <tns:PreApprovedTemplateID>221398</tns:PreApprovedTemplateID> 
      <tns:Priority>High</tns:Priority> 
      <tns:PlannedImplementation_Start>2017-09-29</tns:PlannedImplementation_Start> 
     </tns:CreateDetails> 
     </axis2ns682:Create> 
    </soapenv:Body> 
</soapenv:Envelope> 

出力 -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header>  
    </soapenv:Header> 
    <soapenv:Body> 
     <axis2ns682:Create xmlns:axis2ns682="http://g22.test01.org/test02/RF"> 
     <tns:CreateDetails xmlns:tns="http://g22.test01.org/test02/RF"> 
      <tns:EventUser>MyUsername</tns:EventUser> 
      <tns:PreApprovedTemplateID>221398</tns:PreApprovedTemplateID> 
      <tns:Priority>High</tns:Priority> 
      <tns:PlannedImplementation_Start>2017-09-29</tns:PlannedImplementation_Start> 
     </tns:CreateDetails> 
     </axis2ns682:Create> 
    </soapenv:Body> 
</soapenv:Envelope> 

答えて

0

あなたのXSLTと三つの問題

    を持っていることは

    XLSTを動作していません

  1. XSLTの名前空間を占めていません。 tns:接頭辞によって示されるように、あなたのXMLでは、要素は様々な名前空間にある(EventUser要素は、名前空間http://g22.test01.org/test02/RFである。あなたは、Usernameを選択しているテンプレートはEventUserに一致wsse:Security要素
  2. を削除するために何かをコーディングしていない
  3. ました。UsernameEventUserの子だった場合のみ、あなたが実際に石鹸からそれを選択する必要があります:ヘッダー

すると、このXSLTを試してみてください

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
       xmlns:tns="http://g22.test01.org/test02/RF" 
       xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
       version="1.0"> 

    <xsl:template match="wsse:Security" /> 

    <xsl:template match="tns:EventUser"> 
     <xsl:copy> 
      <xsl:value-of select="//soapenv:Header/wsse:Security/wsse:UsernameToken/wsse:Username"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
関連する問題