我想把XML转换成JSON。但是由于命名空间、前缀和JSON数组的问题,我面临的问题很少。
输入XML
<notifications xmlns="http://soap.sforce.com/2005/09/outbound">
<OrganizationId>123</OrganizationId>
<ActionId>123</ActionId>
<SessionId xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<EnterpriseUrl>qwe</EnterpriseUrl>
<PartnerUrl>qwe</PartnerUrl>
<Notification>
<Id>123</Id>
<sObject xsi:type="sf:Opportunity" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.enterprise.soap.sforce.com">
<sf:Id>ao123</sf:Id>
<sf:Amount>60000.0</sf:Amount>
<sf:CreatedDate>2014-11-26T14:45:52.000Z</sf:CreatedDate>
<sf:IsClosed>false</sf:IsClosed>
</sObject>
</Notification>
</notifications>
输出JSON
{
"notifications": {
"OrganizationId": "123",
"ActionId": "123",
"SessionId": {
"@nil": "true"
},
"EnterpriseUrl": "qwe",
"PartnerUrl": "qwe",
"Notification": [
{
"Id": "ao123",
"sObject": {
"@type": "sf:Opportunity",
"Id": "ao123",
"Amount": "60000.0",
"CreatedDate": "2014-11-26T14:45:52.000Z",
"IsClosed": "false"
}
}
]
}
}
以下是我面临的几个问题
- XML的命名空间和前缀不应出现在json中。
Notification
应该是一个json数组,即使我收到一个项目
到目前为止,我所尝试的是使用method删除名称空间和前缀,然后使用JsonConvert.SerializeXNode
将其转换为JSON。
我觉得这些步骤更多的是数据操作,我正在寻找一些好的方法来实现同样的目的。所以我尝试使用XSLT,我能够删除名称空间前缀.fiddle link for XSLT。但我不确定如何使用XSLT删除前缀,然后将XML转换为预期的JSON格式(可能使用XSLT xml-to-json选项)。正在寻找使用XSLT的解决方案
1条答案
按热度按时间bzzcjhmw1#
你可以试试这个代码
或者假设https://xsltfiddle.liberty-development.net/aUPRNo/1在XSLT之后,您的xml是
您可以使用此代码将其转换为json
在这两种情况下,输出是相同的