很抱歉不得不问类似的问题((Steffen Opel)非常友善地帮助了我。我无法获取 xslt 表来设置调用 Amazon Web Services (AWS) 生成的 xml 文件的样式。我有很多 AWS通过更改架构日期(从 2005-10-05 50 到 2011-08-01)或将 Enpoint 更新为“ecs.amazonaws.co.uk/onca/xml”来纠正所有调用。
对 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 .文件已生成
在不存在“&Style=...”的情况下生成的 xml 文件的缩短版本是:
<?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>
我已经整理了所有其他文件,但这个文件打败了我!
请有人帮忙。
最佳答案
我能够在提供的 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 参数值导致了该问题,或者可能是与安全相关的问题。
请联系亚马逊支持以获得更多帮助。
更新:OP在评论中要求纠正他的转变......
导致不需要的输出的问题出现在以下代码中:
<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>
关于xml - 无法使用 XSLT 文件设置 Amazon AWS 生成的 XML 文件的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9534124/