Xml 使用xslt将Salesforce查询SOAP响应转换为CSV

Xml 使用xslt将Salesforce查询SOAP响应转换为CSV,xml,xslt,wso2,salesforce,wso2esb,Xml,Xslt,Wso2,Salesforce,Wso2esb,我得到以下SOAP响应作为salesforce查询结果 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:sf="urn:sobject.partner.soap.sforce.com" xmlns

我得到以下SOAP响应作为salesforce查询结果

     <?xml version="1.0" encoding="UTF-8"?>
     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:sf="urn:sobject.partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
  <LimitInfoHeader>
     <limitInfo>
        <current>31363</current>
        <limit>92000</limit>
        <type>API REQUESTS</type>
     </limitInfo>
  </LimitInfoHeader>
</soapenv:Header>
  <soapenv:Body>
   <queryResponse>
     <result xsi:type="QueryResult">
        <done>true</done>
        <queryLocator xsi:nil="true" />
        <records xsi:type="sf:sObject">
           <sf:type>Item__c</sf:type>
           <sf:Id xsi:nil="true" />
           <sf:Name>100000031</sf:Name>
           <sf:Active__c>false</sf:Active__c>
           <sf:Active_for_B2B__c>true</sf:Active_for_B2B__c>
           <sf:Active_for_B2C__c>true</sf:Active_for_B2C__c>
           <sf:Active_for_Marketplace__c>true</sf:Active_for_Marketplace__c>
           <sf:Average_Cost__c xsi:nil="true" />
           <sf:B2B_Selling_Price__c>100</sf:B2B_Selling_Price__c>
           <sf:B2C_Selling_Price__c>100</sf:B2C_Selling_Price__c>
           <sf:Brand__c>a0h9000000BAHOkAAP</sf:Brand__c>
           <sf:Breadth__c xsi:nil="true" />
           <sf:Category__c>a0j9000000LnHliAAF</sf:Category__c>
           <sf:CategoryLink1__c>scat066</sf:CategoryLink1__c>
           <sf:CategoryLink1Domain__c>scat004</sf:CategoryLink1Domain__c>
           <sf:Task_Owner__c xsi:nil="true" />
           <sf:Category_Owner__c>abc@test.test</sf:Category_Owner__c>
           <sf:Category_Segment__c>Office Supplies</sf:Category_Segment__c>
           <sf:Class__c>a0j9000000LnKdwAAF</sf:Class__c>
           <sf:EAN_Code__c>10000000001</sf:EAN_Code__c>
           <sf:EDD__c>5.0</sf:EDD__c>
           <sf:Gen_Prod_Posting_Group__c>a0Y9000000C3zGSEAZ</sf:Gen_Prod_Posting_Group__c>
           <sf:Height__c xsi:nil="true" />
           <sf:Inventory_Posting_Group__c>a0d9000000ADKw3AAH</sf:Inventory_Posting_Group__c>
           <sf:Inventory_Type__c xsi:nil="true" />
           <sf:Item_Tracking_Code__c xsi:nil="true" />
           <sf:Last_Direct_Cost__c xsi:nil="true" />
           <sf:Length__c xsi:nil="true" />
           <sf:Long_Description__c>Parker Ball Pen</sf:Long_Description__c>
           <sf:MRP__c>200.0</sf:MRP__c>
           <sf:Requested_By1__c xsi:nil="true" />
           <sf:Sales_Type__c>Catalogue</sf:Sales_Type__c>
           <sf:Service_Item_Group__c xsi:nil="true" />
           <sf:Short_Description__c>Parker Ball Pen</sf:Short_Description__c>
           <sf:Sub_Category__c xsi:nil="true" />
           <sf:Tax_Group__c>a0e9000000K7gdsAAB</sf:Tax_Group__c>
           <sf:Title__c>Parker Ball Pen</sf:Title__c>
           <sf:Type__c>a0k9000000VRpwCAAT</sf:Type__c>
           <sf:Unit_of_Measure__c>a0i90000009jt3fAAA</sf:Unit_of_Measure__c>
           <sf:Unit_Price__c>100.0</sf:Unit_Price__c>
           <sf:Weight__c xsi:nil="true" />
        </records>
        <records xsi:type="sf:sObject">
           <sf:type>Item__c</sf:type>
           <sf:Id xsi:nil="true" />
           <sf:Name>100000032</sf:Name>
           <sf:Active__c>true</sf:Active__c>
           <sf:Active_for_B2B__c>true</sf:Active_for_B2B__c>
           <sf:Active_for_B2C__c>true</sf:Active_for_B2C__c>
           <sf:Active_for_Marketplace__c>true</sf:Active_for_Marketplace__c>
           <sf:Average_Cost__c>200.0</sf:Average_Cost__c>
           <sf:B2B_Selling_Price__c>90</sf:B2B_Selling_Price__c>
           <sf:B2C_Selling_Price__c>100</sf:B2C_Selling_Price__c>
           <sf:Brand__c>a0h9000000BAHLFAA5</sf:Brand__c>
           <sf:Breadth__c>2.0</sf:Breadth__c>
           <sf:Category__c>a0j9000000LnHliAAF</sf:Category__c>
           <sf:CategoryLink1__c>CategoryLink1</sf:CategoryLink1__c>
           <sf:CategoryLink1Domain__c>CategoryLink1Domain</sf:CategoryLink1Domain__c>
           <sf:Task_Owner__c xsi:nil="true" />
           <sf:Category_Owner__c>test@test.test</sf:Category_Owner__c>
           <sf:Category_Segment__c>Office Supplies</sf:Category_Segment__c>
           <sf:Class__c>a0j9000000LnKdwAAF</sf:Class__c>
           <sf:EAN_Code__c>EAN Code</sf:EAN_Code__c>
           <sf:EDD__c>5.0</sf:EDD__c>
           <sf:Gen_Prod_Posting_Group__c>a0Y9000000C3zGSEAZ</sf:Gen_Prod_Posting_Group__c>
           <sf:Height__c>3.0</sf:Height__c>
           <sf:Inventory_Posting_Group__c>a0d9000000ADKw3AAH</sf:Inventory_Posting_Group__c>
           <sf:Inventory_Type__c>Inventoried</sf:Inventory_Type__c>
           <sf:Item_Tracking_Code__c>a0g9000000MdvlwAAB</sf:Item_Tracking_Code__c>
           <sf:Last_Direct_Cost__c>400.0</sf:Last_Direct_Cost__c>
           <sf:Length__c>1.0</sf:Length__c>
           <sf:Long_Description__c>Long Description Long Description Long Description</sf:Long_Description__c>
           <sf:MRP__c>100.0</sf:MRP__c>
           <sf:Requested_By1__c>test@test</sf:Requested_By1__c>
           <sf:Sales_Type__c>Catalogue</sf:Sales_Type__c>
           <sf:Service_Item_Group__c>a0f9000000HajP5AAJ</sf:Service_Item_Group__c>
           <sf:Short_Description__c>Long Description</sf:Short_Description__c>
           <sf:Sub_Category__c xsi:nil="true" />
           <sf:Tax_Group__c>a0e9000000K7gddAAB</sf:Tax_Group__c>
           <sf:Title__c>PEN-bello</sf:Title__c>
           <sf:Type__c>a0k9000000VRpwCAAT</sf:Type__c>
           <sf:Unit_of_Measure__c>a0i90000009jt3fAAA</sf:Unit_of_Measure__c>
           <sf:Unit_Price__c>300.0</sf:Unit_Price__c>
           <sf:Weight__c>4.0</sf:Weight__c>
        </records>
        <size>2</size>
     </result>
   </queryResponse>
</soapenv:Body>

31363
92000
API请求
真的
项目c
100000031
假的
真的
真的
真的
100
100
A0H900000BAHOKAAP
A0J900000LNHLIAAF
scat066
scat004
abc@test.test
办公用品
A0J900000LNKDWAAF
10000000001
5
A0Y900000C3ZGSEAZ
A0D900000ADKW3AH
派克圆珠笔
200
目录
派克圆珠笔
A0E900000K7GDSAAB
派克圆珠笔
A0K900000VRPWCAAT
a0i90000009jt3fAAA
100
项目c
100000032
真的
真的
真的
真的
200
90
100
A0H900000BAHLFAA5
2
A0J900000LNHLIAAF
类别链接1
类别链接1域
test@test.test
办公用品
A0J900000LNKDWAAF
商品条码
5
A0Y900000C3ZGSEAZ
3
A0D900000ADKW3AH
清点
A0G900000MDVLWAAB
400
1
长描述长描述长描述
100
test@test
目录
A0F900000HAJP5AAJ
长描述
A0E900000K7GDDAAB
彭贝洛
A0K900000VRPWCAAT
a0i90000009jt3fAAA
300
4
2.

我使用下面的CSV将其转换为CSV

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text" encoding="iso-8859-1"/>
 <xsl:strip-space elements="*" />
 <xsl:template match="/">
 <xsl:apply-templates select="child::node()"></xsl:apply-templates>
 </xsl:template>

 <xsl:template match="/*/child::*">
    <xsl:for-each select="child::*">
    <xsl:if test="position() != last()"><xsl:value-of select="normalize-space(.)"/>,</xsl:if>
 <xsl:if test="position()  = last()"><xsl:value-of select="normalize-space(.)"/><xsl:text> 
</xsl:text></xsl:if>

,

转换后的结果为空,但预期结果如下

目前的执行结果是空白的。 预期结果如下

项目c、10000031、假、真、真、真、100100、A0H900000BAHOKAAP、A0J900000LNHLIAAF、scat066、scat004、sandeep。gala@staples.in办公用品,A0J900000LNKDWAAF,1000000001,5.0,A0Y900000C3ZGSEAZ,A0D900000ADKW3AAH,,,,,,,派克圆珠笔,200.0,目录,派克圆珠笔,A0E900000K7GDSAAB,派克圆珠笔,A0K900000VRPWCAAT,a0i90000009jt3fAAA,100.0,第c项,10000032,真,真,真,真,200.0,90100,A0H900000BAHLFAA5,2.0,A0J900000LNHLIAAF,分类链接1,分类链接1领域,sandeep。gala@staples.in办公用品,A0J900000LNKDWAAF,EAN代码,5.0,A0Y900000C3ZGSEAZ,3.0,A0D900000ADKW3AAH,库存,A0G900000MDVLWAAB,400.0,1.0,长描述长描述,100.0,请求。by@staples.in,目录,A0F900000HAJP5AAJ,详细说明,A0E900000K7GDDAAB,PEN bello,A0K900000VRPWCAAT,a0i90000009jt3fAAA,300.0,4.0

请帮助我仅获取csv格式的记录


既然你说你只想要“记录”,我猜你想要这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:soap="urn:partner.soap.sforce.com">

    <xsl:template match="/">
        <xsl:for-each select="//soap:records[1]/*">
            <xsl:value-of select="name()"/><xsl:if test="position() &lt; last()">,</xsl:if>
        </xsl:for-each>
        <xsl:text>
        </xsl:text>
        <xsl:apply-templates select="descendant::soap:records"/>
    </xsl:template>

    <xsl:template match="soap:records">
        <xsl:for-each select="*">
            <xsl:value-of select="normalize-space(.)"/><xsl:if test="position() &lt; last()">,</xsl:if>
        </xsl:for-each>
        <xsl:text>
        </xsl:text>
    </xsl:template>

</xsl:stylesheet>

,
,

它使用第一个
记录
元素的子项的名称作为CSV输出的标题,然后应用
记录
的模板,该模板输出每个子项的文本内容,当然用逗号分隔它们。

您的输入XML包含默认名称空间
xmlns=“urn:partner.soap.sforce.com”
。搜索此站点以查找示例。“这不是返回正确的结果。”以及什么是“正确的结果”?Thaks cis,xslt在xslt测试工具中正确转换,但在wso2中不起作用。很抱歉,我无法帮助您,因为我不熟悉wso2。如果可能,请更改XSTL处理器。