Почему мой стиль XSLT внезапно перестал анализировать XML-ответ Product Advertising API? - PullRequest
2 голосов
/ 01 марта 2012

Может кто-нибудь сказать мне, почему этот xslt-файл не анализирует образец xml-файла, который я прикрепил? Он работал пару лет, но внезапно прекратился. Без таблицы стилей XML-файл возвращается из Amazon, но я не могу его стилизовать.

Файл 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 моих сайтов перестали работать.

1 Ответ

3 голосов
/ 01 марта 2012

Обновление

Оказалось, что помимо проблемы с пространством имен XML, о которой говорилось ниже, была еще одна проблема, которая касалась обеих проблем, см. Заключительный комментарий Марка:

Amazon изменил конечную точку с xml-uk.amznxslt.com на 'ecs.amazonaws.co.uk'.


Предположительно XML-пространство имен API рекламы продуктов Amazon обновлено (как подтверждено текущим Схема ), см. Соответствующие операторы:

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 только что добавил элементы и т. д.элементы, которые вы на самом деле using в преобразовании (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>
...