Невозможно стилизовать сгенерированный Amazon AWS XML-файл с использованием XSLT-файла - PullRequest
2 голосов
/ 02 марта 2012

Извиняюсь за необходимость задать аналогичный вопрос (очень любезно помог (Штеффен Опель). Я не могу получить лист xslt для стилизации XML-файла, сгенерированного при вызове Amazon Web Services (AWS). У меня много AWSвызовы и все они были исправлены путем изменения даты схемы (с 2005-10-05 50 на 2011-08-01) или путем обновления Enpoint до 'ecs.amazonaws.co.uk/onca/xml'.*1001.*

Вызов AWS:

RESTstringtemp = "http://ecs.amazonaws.co.uk/onca/xml?Service=AWSECommerceService&AssociateTag=xxxx&SubscriptionId=zzzz&Operation=BrowseNodeLookup&BrowseNodeLookup.1.BrowseNodeId=676410011&BrowseNodeLookup.2.BrowseNodeId=676398011&BrowseNodeLookup.1.ResponseGroup=TopSellers,NewReleases&BrowseNodeLookup.2.ResponseGroup=TopSellers,NewReleases&Style=http://www.wiiuser.co.uk/topsellersnewrel.xslt"

Как видно, он генерирует файл XML и стилизует его с помощью 'topsellersnewrel.xslt'. Файл XML генерируется успешно без указанного стиля. Однако когдауказан стиль, сгенерированный файл остается тем же. Это как если бы файл xslt не существовал. Однако его можно найти здесь http://www.wiiuser.co.uk/topsellersnewrel.xslt.file генерируется

Сокращенная версия XML-файла,генерируется без присутствия '& Style = ...', это:

<?xml version="1.0" encoding="UTF-8"?>
<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  <OperationRequest>
    <HTTPHeaders>
      <Header Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1">
      </Header>
        </HTTPHeaders>
    <RequestId>1ABRF6WY8WSF5FM0EACQ</RequestId>
    <Arguments>
    <Argument Name="BrowseNodeLookup.2.ResponseGroup" Value="TopSellers,NewReleases"></Argument>
    <Argument Name="AssociateTag" Value="xxxx"></Argument>
    <Argument Name="Service" Value="AWSECommerceService"></Argument>
    <Argument Name="SubscriptionId" Value="zzzz"></Argument>
    <Argument Name="Signature" Value="f5mKeNVNEB5/sGIomPd/pXRC5Yfs5aCMchR5qgsvw0c="></Argument>
    <Argument Name="BrowseNodeLookup.1.BrowseNodeId" Value="676410011"></Argument>
    <Argument Name="BrowseNodeLookup.2.BrowseNodeId" Value="676398011"></Argument>
    <Argument Name="Operation" Value="BrowseNodeLookup"></Argument>
    <Argument Name="Timestamp" Value="2012-03-02T12:41:51Z"></Argument>
    <Argument Name="BrowseNodeLookup.1.ResponseGroup" Value="TopSellers,NewReleases"></Argument>
    </Arguments>
    <RequestProcessingTime>0.069159984588623</RequestProcessingTime>
</OperationRequest>
<BrowseNodes>
    <Request>
    <IsValid>True</IsValid>
    <BrowseNodeLookupRequest>
        <BrowseNodeId>676410011</BrowseNodeId>
        <ResponseGroup>TopSellers</ResponseGroup>
        <ResponseGroup>NewReleases</ResponseGroup>
    </BrowseNodeLookupRequest>
    </Request>
    <BrowseNode>
    <BrowseNodeId>676410011</BrowseNodeId>
    <Name>Games</Name>
    <TopSellers>
        <TopSeller>
            <ASIN>B006ZN5WJ0</ASIN>
            <Title>Mario Party 9 (Wii)</Title>
        </TopSeller>
    </TopSellers>
    <NewReleases>
        <NewRelease>
            <ASIN>B0073POVPK</ASIN>
            <Title>Pokepark 2: Wonders Beyond (Wii)</Title>
        </NewRelease>
    </NewReleases>
    </BrowseNode>
</BrowseNodes>
<BrowseNodes>
    <Request>
    <IsValid>True</IsValid>
    <BrowseNodeLookupRequest>
        <BrowseNodeId>676398011</BrowseNodeId>
        <ResponseGroup>TopSellers</ResponseGroup>
        <ResponseGroup>NewReleases</ResponseGroup>
    </BrowseNodeLookupRequest>
    </Request>
    <BrowseNode>
    <BrowseNodeId>676398011</BrowseNodeId>
    <Name>Accessories</Name>
    <TopSellers>
        <TopSeller>
            <ASIN>B006O8ODD2</ASIN>
            <Title>Skylanders Spyro's Adventure: Triple Character Pack - Double Trouble, Whirlwind and Drill Sergeant (Wii/PS3/Xbox 360/PC)</Title>
        </TopSeller>
    </TopSellers>
    <NewReleases>
        <NewRelease>
            <ASIN>B005CT3J66</ASIN>
            <Title>Level Up Stealth Media Storage Tower (PS3/Xbox 360/Wii)</Title>
        </NewRelease>
    </NewReleases>
    </BrowseNode>
</BrowseNodes>
</BrowseNodeLookupResponse> 

Файл xslt:

<?xml version="1.0" encoding="UTF-8" ?>
<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:BrowseNodeLookupResponse/aws:BrowseNodes" />
    </root>
    </xml>
</xsl:template>


<xsl:template match="aws:TopSeller">
        <xsl:variable name="browsenode" select="../../aws:BrowseNodeId" />
        <xsl:variable name="topsellerASIN" select="aws:ASIN" />
        <xsl:variable name="topsellerTitle" select="aws:Title" />
        <BrowseNodeId>
            <browsenode>
                <xsl:value-of select="$browsenode" />
            </browsenode>
        </BrowseNodeId>
        <TopSeller>
            <tsAsin>
                <xsl:value-of select="$topsellerASIN" />
            </tsAsin>
            <tstitle>
                <xsl:value-of select="$topsellerTitle" />
            </tstitle>
        </TopSeller>
</xsl:template> 


<xsl:template match="aws:NewRelease">
        <xsl:variable name="browsenode" select="../../aws:BrowseNodeId" />
        <xsl:variable name="newreleaseASIN" select="aws:ASIN" />
        <xsl:variable name="newreleaseTitle" select="aws:Title" />
        <BrowseNodeId>
            <browsenode>
                <xsl:value-of select="$browsenode" />
            </browsenode>
        </BrowseNodeId>
        <NewRelease>
            <nrAsin>
                <xsl:value-of select="$newreleaseASIN" />
            </nrAsin>
            <nrtitle>
                <xsl:value-of select="$newreleaseTitle" />
            </nrtitle>
        </NewRelease>
</xsl:template> 

Я разобрался со всеми другими файлами, но этот бьетсяменя!

Пожалуйста, пожалуйста, кто-то онLP.

1 Ответ

2 голосов
/ 02 марта 2012

Мне удалось успешно выполнить указанное преобразование для предоставленного XML-документа.

Результат преобразования:

<?xml version="1.0" encoding="iso-8859-1"?>
<xml xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
   <root>

            True

                676410011
                TopSellers
                NewReleases



            676410011
            Games

                <BrowseNodeId>
         <browsenode>676410011</browsenode>
      </BrowseNodeId>
      <TopSeller>
         <tsAsin>B006ZN5WJ0</tsAsin>
         <tstitle>Mario Party 9 (Wii)</tstitle>
      </TopSeller>



      <BrowseNodeId>
         <browsenode>676410011</browsenode>
      </BrowseNodeId>
      <NewRelease>
         <nrAsin>B0073POVPK</nrAsin>
         <nrtitle>Pokepark 2: Wonders Beyond (Wii)</nrtitle>
      </NewRelease>




            True

                676398011
                TopSellers
                NewReleases



            676398011
            Accessories

                <BrowseNodeId>
         <browsenode>676398011</browsenode>
      </BrowseNodeId>
      <TopSeller>
         <tsAsin>B006O8ODD2</tsAsin>
         <tstitle>Skylanders Spyro's Adventure: Triple Character Pack - Double Trouble, Whirlwind and Drill Sergeant (Wii/PS3/Xbox 360/PC)</tstitle>
      </TopSeller>



      <BrowseNodeId>
         <browsenode>676398011</browsenode>
      </BrowseNodeId>
      <NewRelease>
         <nrAsin>B005CT3J66</nrAsin>
         <nrtitle>Level Up Stealth Media Storage Tower (PS3/Xbox 360/Wii)</nrtitle>
      </NewRelease>



   </root>
</xml>

Кроме того, таблица стилей XSLT доступна в http://www.wiiuser.co.uk/topsellersnewrel.xslt

Поэтому эта проблема не связана с XSLT. Скорее всего, другие значения параметров Url QS вызывают проблему, либо это может быть проблема, связанная с безопасностью.

Пожалуйста, обратитесь в службу поддержки Amazon для получения дополнительной помощи.

ОБНОВЛЕНИЕ : ОП попросил в комментарии исправить ошибку трансформации ... ... 1019 *

Проблема, которая вызывает нежелательный вывод, заключается в следующем коде:

    <xsl:apply-templates select="aws:BrowseNodeLookupResponse/aws:BrowseNodes" />

Это применяет шаблоны к любому элементу aws:BrowseNodeLookupResponse/aws:BrowseNodes, но предоставленный код XSLT не имеет шаблонов, соответствующих таким элементам.

В этом случае процессор XSLT выбирает для выполнения встроенный шаблон XSLT для элементов, который просто выдает <xsl:apply-templates>, что приводит к обработке всех его дочерних элементов. Это повторяется рекурсивно, пока не встретится дочерний элемент текстового узла - в этом случае для выполнения выбирается встроенный шаблон для текстового узла, и его действие заключается в выводе текстового узла.

Так выводятся все потомки текстовых узлов aws:BrowseNodeLookupResponse/aws:BrowseNodes (не являющиеся потомками элементов, для которых предусмотрены соответствующие шаблоны) .

Решение : Просто добавьте следующий шаблон:

<xsl:template match="text()"/>

Теперь выдается :

<?xml version="1.0" encoding="iso-8859-1"?>
<xml xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
   <root>
      <BrowseNodeId>
         <browsenode>676410011</browsenode>
      </BrowseNodeId>
      <TopSeller>
         <tsAsin>B006ZN5WJ0</tsAsin>
         <tstitle>Mario Party 9 (Wii)</tstitle>
      </TopSeller>
      <BrowseNodeId>
         <browsenode>676410011</browsenode>
      </BrowseNodeId>
      <NewRelease>
         <nrAsin>B0073POVPK</nrAsin>
         <nrtitle>Pokepark 2: Wonders Beyond (Wii)</nrtitle>
      </NewRelease>
      <BrowseNodeId>
         <browsenode>676398011</browsenode>
      </BrowseNodeId>
      <TopSeller>
         <tsAsin>B006O8ODD2</tsAsin>
         <tstitle>Skylanders Spyro's Adventure: Triple Character Pack - Double Trouble, Whirlwind and Drill Sergeant (Wii/PS3/Xbox 360/PC)</tstitle>
      </TopSeller>
      <BrowseNodeId>
         <browsenode>676398011</browsenode>
      </BrowseNodeId>
      <NewRelease>
         <nrAsin>B005CT3J66</nrAsin>
         <nrtitle>Level Up Stealth Media Storage Tower (PS3/Xbox 360/Wii)</nrtitle>
      </NewRelease>
   </root>
</xml>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...