XML’den HTML’ye Dönüşümde XSLT Kullanarak Resim Nasıl Eklenir

XML belgelerini HTML’ye dönüştürmek bazen karmaşık olabilir, özellikle de resimler gibi öğelerle çalışırken. Birçok geliştirici, bunu uygulamaya çalışırken hatalarla karşılaşmaktadır ve sorunun kökenini anlamak etkili bir çözüm uygulamakta yardımcı olabilir. Bu yazıda, yaygın bir sorunu inceleyecek ve XML’den HTML’ye dönüşümlerinizde resim eklemenin basit ve etkili bir yolunu sunacağız.

Problem

Basit bir resim bilgisi içeren XML belgesini ele alalım. Eğer bunu HTML’ye dönüştürmeye çalışırken şu hata mesajıyla karşılaşırsanız:

“Bir element başlangıç etiketi açık olmadığında bir nitelik düğümü yazılamaz,”

Bu, XSLT kullanarak resim etiketinin niteliklerini eklemeye çalıştığınızda bir sorun olduğunu gösterir. Soruna yol açabilecek XML içeriğine ve XSLT koduna bakalım.

Örnek XML İçeriği

<root>
    <HeaderText>
        <HeaderText>Dan Testing</HeaderText>
    </HeaderText>
    <Image>
        <img width="100" height="100" alt="FPO lady" src="/uploadedImages/temp_photo_small.jpg"/>
    </Image>
    <BodyText>
        <p>This is a test of the body text<br /></p>
    </BodyText>
    <ShowLinkArrow>false</ShowLinkArrow>
</root>

İlgili XSLT Kodu

<xsl:stylesheet version="1.0" extension-element-prefixes="msxsl"
    exclude-result-prefixes="msxsl js dl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:js="urn:custom-javascript" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:dl="urn:datalist">
    <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>
    <xsl:template match="/" xml:space="preserve">
        <img>
            <xsl:attribute name="width">
                100
            </xsl:attribute>
            <xsl:attribute name="height">
                100
            </xsl:attribute>
            <xsl:attribute name="class">
                CalloutRightPhoto
            </xsl:attribute>
            <xsl:attribute name="src">
                <xsl:copy-of select="/root/Image/node()"/>
            </xsl:attribute>
        </img>
    </xsl:template>
</xsl:stylesheet>

Burada sorun, aşağıdaki kod parçasında yatmaktadır:

<xsl:attribute name="src">
    <xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>

xsl:copy-of komutu bir düğüm veya düğüm setini kopyalamaya çalışır, ancak nitelikler yalnızca metin değerleri içerebilir, tam düğümler değil.

Çözüm

Bunun yerine, istenen çıktıyı daha etkili bir şekilde elde etmek için xsl:value-of komutunu veya bir Nitelik Değer Şablonu (AVT) kullanabilirsiniz.

Önerilen Yaklaşım: Nitelik Değer Şablonu Kullanma

Çok daha kısa ve zarif bir çözüm aşağıdaki gibidir:

<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>

Nitelik Değer Şablonları (AVT) Nedir?

  • Nitelikteki {} kullanımı, bir Nitelik Değer Şablonunu ifade eder.
  • İfadeyi metin değerini döndüren XPATH ifadeleriyle birleştirmenizi sağlar, bu da dinamik olarak nitelikler ayarlamak için idealdir.

Neden Bu Çalışır

  • Bu tek satır, birden fazla xsl:attribute satırının yerine geçerek karmaşıklığı azaltır.
  • XPath ifadesi, AVT içinde kullanıldığında XSLT işlemcisini metin değerini alması için bilgilendirir.

Sonuç

XSLT ile XML belgesini HTML’ye dönüştürürken resim eklemek karmaşık olmak zorunda değil. Nitelik Değer Şablonlarını kullanarak kodunuzu etkili bir şekilde sadeleştirebilir ve yaygın hatalardan kaçınabilirsiniz. Bir sonraki XSLT resim dahil etme sorunuyla karşılaştığınızda, temiz ve etkili bir çözüm için AVT’lerin gücünden yararlanmaya dikkat edin.

Bu ilkeleri takip etmek, XSLT dönüşümlerini daha akıcı hale getirecek ve istenen sonuçları gereksiz hatalar olmadan üretmenize yardımcı olacaktır. İyi kodlamalar!