首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Amazon xml响应中断的类型php xsl

Amazon xml响应中断的类型php xsl
EN

Stack Overflow用户
提问于 2013-09-02 03:58:59
回答 2查看 92关注 0票数 0

因为Amazon关闭了对xslt的支持,所以我想用php5的xsl把它移到我自己的服务器上。我的输出需要是文本格式,以便我的JS将其处理为网页。我的问题是Amazon的xml响应(非常简短)看起来像这样

代码语言:javascript
复制
    <?xml version="1.0" ?>
    <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
       /............./
    </ItemLookupResponse>

我的问题是,只要删除xmlns="http://..."“,我的xsl样式表就能正常工作。xsl样式需要什么才能绕过它或忽略它?我需要的所有节点都在外部节点内。

下面是xslt:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="CallBack" select="'amzJSONCallback'"/>
<xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:value-of select="$CallBack"/>
  <xsl:text>( { "Item" : </xsl:text><xsl:apply-templates/><xsl:text> } ) </xsl:text>
 </xsl:template>

 <xsl:template match="OperationRequest"></xsl:template>
 <xsl:template match="Request"></xsl:template>

 <xsl:template match="Items">
   <xsl:apply-templates select="Item"/>
  </xsl:template>

 <xsl:template match="Item">
  <xsl:text> {</xsl:text>
  <xsl:text>"title":"</xsl:text><xsl:apply-templates select="ItemAttributes/Title"/><xsl:text>",</xsl:text>
  <xsl:text>"author":"</xsl:text><xsl:apply-templates select="ItemAttributes/Author"/><xsl:text>",</xsl:text>
  <xsl:text>"pubbdate":"</xsl:text><xsl:apply-templates select="ItemAttributes/PublicationDate"/><xsl:text>"</xsl:text>
  <xsl:text>} </xsl:text>
 </xsl:template>
</xsl:stylesheet>
EN

回答 2

Stack Overflow用户

发布于 2013-09-02 06:53:42

您可能应该了解XML名称空间是如何工作的。简而言之,您必须在XSL文件中定义一个名称空间前缀,如下所示:

代码语言:javascript
复制
<xsl:stylesheet ... xmlns:awse="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

然后,您必须使用限定名称来匹配和选择该名称空间下的元素:

代码语言:javascript
复制
<xsl:template match="awse:ItemLookupResponse">

(使用XSLT 2.0,您可以定义默认名称空间。但是由于您使用的是PHP,因此您可能只能使用XSLT 1.0。)

票数 0
EN

Stack Overflow用户

发布于 2013-09-08 23:50:52

看起来nwellnhof是正确的。我在测试中使用了错误的名称空间。我所做的就是添加:

代码语言:javascript
复制
<xsl:stylesheet ... xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

那么元素看起来就像

代码语言:javascript
复制
<xsl:template match="aws:ItemLookupResponse">

现在,转换可以完美地工作。我不知道为什么我第一次尝试的时候它不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18562334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档