2

谁能告诉我为什么这个 xslt 文件没有解析我附加的示例 xml 文件?它已经工作了几年,但突然停止了。如果没有样式表,xml 文件会从亚马逊返回,但我现在无法设置它的样式。

xslt 文件是:

<?xml version="1.0" encoding="UTF-8" ?><!-- DWXMLSource="wii top sellers Med.xml" -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:template match="/">
    <xml>
    <root>
        <xsl:apply-templates select="aws:ItemSearchResponse/aws:Items/aws:Item" />
    </root>
    </xml>
</xsl:template>

<xsl:template match="aws:Item">
<xsl:variable name="asin" select="aws:ASIN" />

    <Item>
        <gameAsin>
            <xsl:value-of select="$asin" />
        </gameAsin>
    </Item>
</xsl:template> 
</xsl:stylesheet>

XML 文件的示例是:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
        <RequestId>3dadfcef-c438-40bd-b96b-1ba34811aa70</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="ItemSearch"></Argument>
            <Argument Name="Service" Value="AWSECommerceService"></Argument>
            <Argument Name="AssociateTag" Value="wii07-21"></Argument>
            <Argument Name="Keywords" Value="&quot;Bundle&quot;"></Argument>
            <Argument Name="Sort" Value="salesrank"></Argument>
            <Argument Name="SubscriptionId" Value="xxxxxxxxx"></Argument>
            <Argument Name="ItemSearch.1.BrowseNode" Value="676410011"></Argument>
            <Argument Name="Signature" Value="xxxxxxxx"></Argument>
            <Argument Name="ItemSearch.Shared.SearchIndex" Value="VideoGames"></Argument>
        <Argument Name="Timestamp" Value="2012-03-01T15:44:24Z"></Argument>
            <Argument Name="ResponseGroup" Value="Large"></Argument>
            <Argument Name="ItemSearch.2.BrowseNode" Value="676398011"></Argument>
        </Arguments>
        <RequestProcessingTime>0.2811460000000000</RequestProcessingTime>
</OperationRequest>
<Items>
    <Item>
        <ASIN>B004JMZH4O</ASIN>
    </Item>
</Items>
</ItemSearchResponse>

任何帮助表示赞赏,因为我的 5 个网站因此而停止工作。

4

1 回答 1

3

更新

事实证明,除了下面解决的 XML 命名空间问题之外,还涉及另一个问题,这两个问题都属于手头的问题,请参阅 Mark 的结束评论:

Amazon 已将 Endpoint 从 xml-uk.amznxslt.com 更改为“ecs.amazonaws.co.uk”。


大概亚马逊产品广告 APIXML 命名空间已更新(通过当前Schema Location确认),请参阅相应的声明:

XSLT 转换

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-10-05">

XML 响应

<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

原因

命名空间不再匹配,因此 XML 转换中的各个选择器(例如select="aws:ItemSearchResponse/aws:Items/aws:Item")将不匹配 XML 响应中的元素。

解决方案

假设 Amazon 刚刚添加了元素等,更新您的转换中的命名空间可能会aws:Item解决该问题 - 您在转换 (和aws:ASIN) 中实际使用的元素至少仍然存在;否则您可能需要依次根据新架构调整选择器。


附录

为了说明我的评论 - 这是我通过使用调整后的命名空间应用转换得到的结果,它现在也相应地适用于所有结果元素,并可能相应地影响您的后续处理管道:

<?xml version="1.0" encoding="iso-8859-1"?>
<xml xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
  <root>
    <Item>
      <gameAsin>B004JMZH4O</gameAsin>
    </Item>
  </root>
</xml>
于 2012-03-01T16:46:29.973 回答