PHP XSLTProcessor kullanarak HTML5 + SVG belge oluşturmak için nasıl

0 Cevap php

XML hakkında biraz proje için ben SVG ve WAI-ARIA desteği var gibi HTML5 kullanmaya çalışın. Ben de bir belge için bir XSL stil kullanmak istiyorum. Ama ben iç içe bir SVG ile geçerli bir HTML5 belge alınamıyor. İşte ben bugüne kadar test bazı versiyonu:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:template match="/">        
        <html xmlns="http://www.w3.org/1999/xhtml">
        // content with the svg tag in the body
        </html>
    </xsl:template>
</xsl:stylesheet>

header('Content-Type: application/xml'); çalıştığını ve bu HTML çıktıyı üretir kombinasyonu:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
    // content with the svg tag in the body
</html>

Ama bu HTML5 değildir ve bir DOCTYPE olmadan ben W3 validator hataları bir sürü olsun. Yani şu XSL'yi kullanılan bir HTML5 belgeyi almaya çalışırken:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="html"/>
    <xsl:template match="/">
        <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE HTML></xsl:text>        
        <html>
        // content with the svg tag in the body
        </html>
    </xsl:template>
</xsl:stylesheet>

Ama ne yazık ki thze aşağıdaki HTML çıktısını üretecektir:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        ....
    </head>
    // content with the svg tag in the body
</html>

Gördüğünüz gibi düzenli HTML5 ama birlikte kullanarak header('Content-Type: application/xml'); (otomatik oluşturulmuş) meta etiketinin sonunda nedeniyle eksik eğik çizgi başarısız olur. Kullanımı header('Content-Type: image/xhtml+svg'); veya header('Content-Type: text/html'); hiçbir XML ayrıştırma hatası var, ama sayfa (etiketleri olmadan) bir grafik olarak değil metin olarak SVG göstermez.

Herkes meta eklenecek etiket veya nasıl SVG rendern tarayıcı yapacak bir screensize Content-Type önlemek için nasıl bana söyleyebilir. Ya da başka herhangi bir ipucu bu çalışma almak için. Gerçekten NAV ve FOOTER gibi WAI-ARIA Landmark Rolleri bir HTML5 etiketleri devam edebilmek için HTML5 tutmak istiyorum.

SOLUTION:

(': Uygulama: Content-Type xhtml + xml') Bu SVG başlık kullanarak render ile geçerli HTML5 üretecek;

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml" omit-xml-declaration="yes" />
    <xsl:template match="/">
        <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE HTML></xsl:text>
        <html xmlns="http://www.w3.org/1999/xhtml">
        // content with the svg tag in the body
        </html>
    </xsl:template>
</xsl:stylesheet>

Canlı demo burada görebilirsiniz: http://kau-boys.de/HTML5-SVG.php

0 Cevap