我正在尝试从肥皂环境中复制 XML,并且我已经能够成功完成此操作。接下来我想删除所有 XMLNS,我再次能够成功完成。但是,我现在尝试从 XML 有效负载中间选择一个 XSI 属性,并在 XML 中创建一个新字段,其中包含 XSI=TYPE 字段的内容。我将展示我想要做什么:
示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<notifications xmlns="http://soap.sforce.com/2005/09/outbound">
<ActionId>04kf000000000FfAAI</ActionId>
<SessionId xsi:nil="true"/>
<Notification>
<Id>04lf00000000xvQAAQ</Id>
<sObject xsi:type="sf:Account" xmlns:sf="urn:sobject">
<sf:Id>001f0000006UzdCAAS</sf:Id>
<sf:Customer_Number__c>dummy1234</sf:Customer_Number__c>
<sf:FirstName>Test</sf:FirstName>
<sf:LastModifiedDate>2012-10-15T10:59:54.000Z</sf:LastModifiedDate>
<sf:LastName>Test</sf:LastName>
</sObject>
</Notification>
</notifications>
</soapenv:Body>
</soapenv:Envelope>
当前 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:r="http://soap.sforce.com/2005/09/outbound"
exclude-result-prefixes="r">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="/soap:Envelope//r:notifications"/>
</xsl:template>
<xsl:template match ="*" >
<xsl:element name ="{local-name()}" >
<xsl:apply-templates select ="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="utf-8"?>
<notifications>
<ActionId>04kf000000000FfAAI</ActionId>
<SessionId>true</SessionId>
<Notification>
<Id>04lf00000000xvQAAQ</Id>
<sObject>tableName<Id>001f0000006UzdCAAS</Id>
<Customer_Number__c>dummy1234</Customer_Number__c>
<FirstName>Test</FirstName>
<LastModifiedDate>2012-10-15T10:59:54.000Z</LastModifiedDate>
<LastName>Test</LastName>
</sObject>
</Notification>
</notifications>
这是不正确的,因为只是将 XSI:TYPE 的内容放在 sObject 中,我需要在它自己的字段中,例如这是所需的输出:
<?xml version="1.0" encoding="utf-8"?>
<notifications>
<ActionId>04kf000000000FfAAI</ActionId>
<SessionId>true</SessionId>
<Notification>
<Id>04lf00000000xvQAAQ</Id>
<sObject>
<tableName>tableName</tableName>
<Id>001f0000006UzdCAAS</Id>
<Customer_Number__c>dummy1234</Customer_Number__c>
<FirstName>Test</FirstName>
<LastModifiedDate>2012-10-15T10:59:54.000Z</LastModifiedDate>
<LastName>Test</LastName>
</sObject>
</Notification>
</notifications>