WSO2 EI和XSLT介体

问题描述 投票:0回答:2

我有一个SOAP调用返回以下内容:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <soapenv:Body>
      <ns:getTenantResponse xmlns:ns="http://services.mgt.tenant.carbon.wso2.org">
         <ns:return xsi:type="ax2696:TenantInfoBean" xmlns:ax2696="http://beans.common.stratos.carbon.wso2.org/xsd" xmlns:ax2698="http://exception.common.stratos.carbon.wso2.org/xsd" xmlns:ax2700="http://api.user.carbon.wso2.org/xsd" xmlns:ax2702="http://beans.mgt.tenant.carbon.wso2.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ax2696:active>true</ax2696:active>
            <ax2696:admin>admin</ax2696:admin>
            <ax2696:adminPassword xsi:nil="true"/>
            <ax2696:createdDate>2020-03-31T18:05:30.321-03:00</ax2696:createdDate>
            <ax2696:email>[email protected]</ax2696:email>
            <ax2696:firstname>erico</ax2696:firstname>
            <ax2696:lastname>mtx</ax2696:lastname>
            <ax2696:originatedService xsi:nil="true"/>
            <ax2696:successKey xsi:nil="true"/>
            <ax2696:tenantDomain>dom20.com</ax2696:tenantDomain>
            <ax2696:tenantId>1</ax2696:tenantId>
            <ax2696:usagePlan/>
         </ns:return>
      </ns:getTenantResponse>
   </soapenv:Body>
</soapenv:Envelope>

我需要通过WSO2 Enterprise Integrator 6.6.0中的XSLT中介来处理退货。

某些属性随内容一起返回:

xsi:nil="true"

我需要我的介体将这些标签替换为属性的空值。

我当前的调解员正在排除出现的事件:

<?xml version="1.0"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <!-- TEMPLATE #1 -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <!-- TEMPLATE #2 -->
  <xsl:template match="*[@xsi:nil = 'true']" />
</xsl:stylesheet>

输出是这样的:

{
    "getTenantResponse": {
        "return": {
            "@type": "ax2696:TenantInfoBean",
            "active": true,
            "admin": "admin",
            "createdDate": "2020-04-08T15:58:08.793-03:00",
            "email": "[email protected]",
            "firstname": "sample",
            "lastname": "test",
            "tenantDomain": "sample.com",
            "tenantId": 20,
            "usagePlan": null
        }
    }
}

正在删除内容中带有xsi:nil =“ true”的元素,例如“ successKey”。

但是我需要它来替换''的值。

思考

xslt wso2 wso2esb
2个回答
0
投票

不确定我是否真的理解你的问题。这是您要达到的目标吗?

替换

  <!-- TEMPLATE #2 -->
  <xsl:template match="*[@xsi:nil = 'true']" />

  <!-- TEMPLATE #2 -->
  <xsl:template match="@xsi:nil[. = 'true']">
      <xsl:attribute name="nil" namespace="http://www.w3.org/2001/XMLSchema-instance"/>
  </xsl:template>

在这里查看它的工作:https://xsltfiddle.liberty-development.net/pNmC4J4


0
投票

您的模板匹配具有xsi:nil="true"属性的任何元素,并将其删除。如果只想删除属性本身,请使其:

<xsl:template match="@xsi:nil[. = 'true']" />
© www.soinside.com 2019 - 2024. All rights reserved.