Html olarak xml görüntüleme yardıma ihtiyacım var

2 Cevap php

Ben XML HTML Amazon Web Services döndürülen dönüştürmek için Macromedia XSLTransform sınıfını kullanmak çalışıyorum. İşte dönüşümü çağıran PHP sayfası:

<?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();
?>

Ve burada aws1.xsl sayfanın bir parçacık bulunuyor

<?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>

Temel kod çalışıyor - Ben geri beklenen ASIN öğe üzerinde veri almak. Ve ben bilerek geçersiz bir nitelik koyarsanız ben bir ayrıştırıcı hatası alıyorum çünkü XSL temelde çalıştığını biliyorum. Ama ne geri almak yerine HTML metin büyük bir biçimlendirilmemiş demet. Çeşitli <xsl:output method> seçenekleri denedim ama hiçbiri işe gibi görünüyor. Ben kodlama veya charset sorunu bir tür olduğunu düşünüyor.

2 Cevap

Eğer "/" eşleştirmek için bir kural oluşturmak için gereken veya XSL örtük belge ağacının bir metne dönüştürme dayalı sizin için bir tane üretecektir.

Ben bu XSL'yi yeniden olacaktır:

<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>

Veya mevcut xsl için bu şablonu eklemek

<xsl:template match="*|@*">
<xsl:apply-templates select="*|@*"/>
</xsl:template>

Hem şablonları XSL yapar SADECE örtülü maç olan ("/") belge kökünü maç olacaktır. Madde: Bu ilk "/" her tablo satır çenesinde eşleştiren bir tablo yaratacak html etiketi için harita yapmak istiyorum. İkinci tüm düğümleri (ve nitelikleri), çıkış hiçbir maç, ve sonra tüm çocuklara maç kalkışabilir. Ürün tüm düğümleri işlemek istiyorsanız, ikinci iyidir: İlk yalnızca aws işlemek istiyorsanız iyidir. İkinci (sizin optimizasyon özellikleri XSLT işlemci ve belirli XSLT belge bağlı) olabilir işlemek için çok daha uzun sürer.

Yerine XML HTML yolluyorlar belirtmek için içerik türünü ayarlayın.

header('Content-type: text/html');