将 Amazon mws API 响应 xml 解析为包含数据表的数据数据集



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

<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 文档?

通常,您可以使用以下内容来执行要执行的操作:

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

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

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 转换并为您发布一个示例转换。

编辑添加:出于测试目的,如果您删除您发布的示例的元素内的元素,则为数据。ReadXml() 可以将示例 XML 读入数据集。

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

<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>

最新更新