Php 需要帮助将xml显示为html吗
我试图使用Macromedia XSLTransform类将AmazonWeb服务返回的XML转换为HTML。以下是调用转换的PHP页面:Php 需要帮助将xml显示为html吗,php,xml,xslt,amazon-web-services,xslt-1.0,Php,Xml,Xslt,Amazon Web Services,Xslt 1.0,我试图使用Macromedia XSLTransform类将AmazonWeb服务返回的XML转换为HTML。以下是调用转换的PHP页面: <?php require_once('includes/MM_XSLTransform/MM_XSLTransform.class.php'); $restquery = "http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[myid]
<?php
require_once('includes/MM_XSLTransform/MM_XSLTransform.class.php');
$restquery = "http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[myid]&Operation=ItemLookup&ResponseGroup=Large&ItemId=" . htmlspecialchars($_GET["asin"]);
$mm_xsl = new MM_XSLTransform();
$mm_xsl->setXML($restquery);
$mm_xsl->setXSL("aws1.xsl");
echo $mm_xsl->Transform();
?>
setXML($restquery);
$mm_xsl->setXSL(“aws1.xsl”);
echo$mm_xsl->Transform();
?>
这里是aws1.xsl页面的一个片段
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2006-06-07">
<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="aws:Item">
<html>
<body>
<table>
<tr>
<td style="border-bottom:#C0C0C0 dotted 1px;padding:10px">
<table cellpadding="0" cellspacing="0" style="width: 90%;padding:5px">
<tr>
<xsl:if test="aws:SmallImage/aws:URL">
<td valign="top" width="50">
<img>
<xsl:attribute name="src">
<xsl:value-of select="aws:SmallImage/aws:URL" disable-output-escaping="yes" />
</xsl:attribute>
<xsl:attribute name="border">0</xsl:attribute>
</img>
</td>
</xsl:if>
<!-- bunch of other stuff -->
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
0
基本代码正在运行-我得到了预期ASIN项的数据。我知道XSL基本上是有效的,因为如果我故意在其中放入一个无效属性,就会出现解析器错误。但我得到的是一大堆未格式化的文本,而不是HTML。我尝试了各种
选项,但似乎都不起作用。我认为这是某种编码或字符集问题。设置您的内容类型以指示您发送的是HTML而不是XML
header('Content-type: text/html');
您需要创建一个与“/”匹配的规则,否则XSL将根据文档树的文本转换隐式地为您生成一个规则 我将把XSL改写为:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2006-06-07">
<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html>
<head>...</head>
<body>
<table>
<thead>...</thead>
<tbody>
<xsl:apply-templates select="//aws:Item"/>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="aws:Item">
<tr>
<td>...</td>
</tr>
</xsl:template>
</xsl:stylesheet>
...
...
...
或者将此模板添加到现有xsl中
<xsl:template match="*|@*">
<xsl:apply-templates select="*|@*"/>
</xsl:template>
这两个模板都将匹配文档根(“/”),这是XSL唯一的隐式匹配。首先将“/”映射到html标记,该标记将创建一个表,其中每个表行映射到aws:item。第二个将匹配所有节点(和属性),不输出任何内容,然后尝试匹配所有子节点。如果只希望处理aws:Item,则第一个更好;如果希望处理所有节点,则第二个更好。第二种可能(取决于xslt处理器和特定xslt文档的优化功能)需要更长的时间来处理。@kts:此站点上没有
标记。但在编辑器上方有一个方便的“格式为代码”按钮你能发布完整的XSL吗?我想用JAVA做这个。