首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将amazon mws api响应xml解析为包含数据表的数据集

将amazon mws api响应xml解析为包含数据表的数据集
EN

Stack Overflow用户
提问于 2015-03-10 23:51:11
回答 1查看 672关注 0票数 0

这是我从亚马逊mws ListInventorySupplyRequest得到的回复

代码语言:javascript
复制
<ListInventorySupplyResponse xmlns="http://mws.amazonaws.com/FulfillmentInventory/2010-10-01/">
  <ListInventorySupplyResult>
    <InventorySupplyList>
      <member>
        <SellerSKU>SKIjkhsad </SellerSKU>
        <FNSKU>lksdkl</FNSKU>
        <ASIN>;kzjsdkj</ASIN>
        <Condition>NewItem</Condition>
        <TotalSupplyQuantity>0</TotalSupplyQuantity>
        <InStockSupplyQuantity>0</InStockSupplyQuantity>
        <SupplyDetail />
      </member>
      <member>
        <SellerSKU>another sku</SellerSKU>
        <FNSKU>dklhfa</FNSKU>
        <ASIN>ajshdf;a</ASIN>
        <Condition>NewItem</Condition>
        <TotalSupplyQuantity>8</TotalSupplyQuantity>
        <InStockSupplyQuantity>8</InStockSupplyQuantity>
        <EarliestAvailability>
          <TimepointType>Immediately</TimepointType>
        </EarliestAvailability>
        <SupplyDetail>
          <member>
            <Quantity>8</Quantity>
            <SupplyType>InStock</SupplyType>
            <EarliestAvailableToPick>
              <TimepointType>Immediately</TimepointType>
            </EarliestAvailableToPick>
            <LatestAvailableToPick>
              <TimepointType>Immediately</TimepointType>
            </LatestAvailableToPick>
          </member>
        </SupplyDetail>
      </member>
    </InventorySupplyList>
    <NextToken>nextTken</NextToken>
  </ListInventorySupplyResult>
  <ResponseMetadata>
    <RequestId>RequestID</RequestId>
  </ResponseMetadata>
</ListInventorySupplyResponse>

有没有人有一种有效的方法来将它解析成数据集和数据表?

或者有关于这方面的官方mws文档吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 01:22:25

通常,您可以使用以下命令来执行您想要执行的操作:

代码语言:javascript
复制
using System.Data;

DataSet data = new DataSet();
data.ReadXml(@"Example.xml");

您发布的XML的问题是,它具有名称相同的嵌套元素。因此,在data.ReadXml()过程中会出现错误。您应该能够通过使用带有以下代码的XML转换来解决此问题:

代码语言:javascript
复制
using System.Data;
using System.Xml.Xsl;

XslTransform transform = new XslTransform();
transform.Load(@"Transform.xsl");
transform.Transform(@"Example.xml", @"TransformedExample.xml");

DataSet data = new DataSet();
data.ReadXml(@"TransformedExample.xml");

不幸的是,我已经有好几年没有编写XML转换了,现在我没有时间研究它的语法。如果今晚晚些时候我还有时间的时候不能回答这个问题,我可以研究XML转换,并为您发布一个示例转换。

编辑后添加:出于测试目的,如果删除所发布示例的元素内的元素,data.ReadXml()可以将示例XML读取到DataSet中。

编辑后添加:我终于有时间为您创建一个示例XML转换。正如我上面提到的,我已经有好几年没有写过任何XSL了。这应该适用于您的示例,但可能需要对其进行修改,以便与实际的XML文档一起使用。此转换的作用是将InventorySupplyList/成员子元素和SupplyDetail/成员子元素分别重命名为InventorySupplyListMember和SupplyDetailMember。

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:aws="http://mws.amazonaws.com/FulfillmentInventory/2010-10-01/"
    xsl:exclude-result-prefixes="aws">

    <xsl:output indent="yes"/>

    <!--Identity Transform.-->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="aws:InventorySupplyList/aws:member">
        <xsl:element name="InventorySupplyListMember" namespace="{namespace-uri()}">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="aws:SupplyDetail/aws:member">
        <xsl:element name="SupplyDetailMember" namespace="{namespace-uri()}">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28968193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档