XML’de Veri Manipülasyonu : XSLT

Talha Uysal
Apinizer
Published in
4 min readOct 28, 2021

Herkese selamlar, XML yazı serimize devam ediyoruz. Bu yazıda XML dokümanlarını , başka formatlara dönüştürmemizi sağlayan XSLT’yi konu alacağım.

XSLT (Extensible Stylesheet Language Transformations) , Türkçe karşılığıyla “Genişletilebilir Biçimlendirme Dili Dönüşümleri” olarak ifade edilmektedir.

XSLT dokümanları da XML kullanılarak oluşturulur ve kaynak XML üzerinde istenilen elementleri oluşturabilmemize olanak sağlar. XSLT kullanarak XML dokümanları içerisinde yer alan veriyi istediğimiz şekilde kullanabiliriz.

Bu yazımdaki örneklerde kullandığım XML ve XSL dokümanına ait kodlar aşağıda yer almaktadır.

cars.xml Dokümanı

cars.xsl Dokümanı (İlk Örnek)

cars2.xsl Dokümanı (İkinci Örnek)

Şimdi bu XSL dokümanı içerisinde yer alan ifadeleri teker teker inceleyelim.

Her XML dokümanında başlangıç tanımı yapıldığı gibi XSLT dokümanlarında da, bu dokümanın XML dokümanı olduğu bildirilir. Bu bildirimi yaptıktan sonra aşağıdaki görselde yer alan bildirim gerçekleştirilir.

Bu bildirim dokümanın bir XSL dokümanı olduğunu, versiyonunu ve hangi dokümana bağlı kalınarak oluşturulduğunu göstermektedir. Bu XSLT dokümanı W3C tarafından hazırlanan “Transform” dokümanına bağlı kalınarak oluşturulmuştur. Yukarıdaki görselde XSLT tanımlama işlemi “stylesheet” ifadesiyle yapılmıştır, bu ifade yerine aynı görevi paylaşan “transform” ifadesi de kullanılabilir. Bu ifadenin örnek kullanımı da aşağıdaki görselde verilmiştir.

Yukarıdaki görselde yer almakta olan <xsl:template match =”/”> ifadesi oluşturulmuş bir şablonu XML elementleri ile eşleştirmeye yaramaktadır. Match ifadesinin almış olduğu değer ise bir XPath ifadesidir. Kaynak XML’in hangi kısım üzerinde işlem yapılacağını belirtmek için kullanılır. Şayet match ifadesinin değeri “/” ile belirtilirse bu yapılacak olan işlemlerin bütün dokümanı etkileyeceğini gösterir.

Yukarıdaki görselde de görüldüğü üzere burada bir döngü işlemi yapılmaktadır. Programlamaya hakim olanlar için kafalarda bir şeyler canlanmıştır mutlaka. Burada “cars” elementi içerisinde yer alan bütün “car” elementleri sırasıyla dolaşılıp, bu elemente ait “brand”, “model”, “daily_price”, “description” gibi elementlerin değerleri çekilmektedir. Görselden de anlaşıldığı üzere burada bu işlemi “value-of” ifadesi gerçekleştirmektedir. Sırayla dolaşılan bu değerlerde yeni tag’leriyle birlikte oluşturulacaktır.

Şimdi yukarıda verdiğimiz örneği Apinizer ürünümüz içerisinde yer alan “XML Transformer” aracı ile test edelim.

Aşağıda yer alan görsel üzerinden XSLT’ nin detaylarına inelim ve XSLT ile neler yapabileceğimizi bir kez daha anlayalım.

Bu örneğimizde ise XSLT dokümanımızda bir “if” ifadesinin yer aldığını görmekteyiz. Koşulumuz ise “daily_price” yani araçların günlük fiyatı 200'den büyük olanların listelenmesini sağlayan bir koşuldur. Örneğimizi bu haliyle test aracımızda çalıştırdığımızda ise alacağımız sonuç aşağıdaki görselde yer almaktadır.

Yukarıdaki örnekte de görüldüğü üzere, “Cars.xml” isimli belgemizde yer alan araçların günlük fiyatı 200'den büyük olan araçlar test aracımızın “Output” alanında gösterilmektedir.

Son örneğimiz olarak bir SOAP mesajın SOAP header kısmına XSLT kullanarak veri eklemeyi gösterelim. Aşağıda bu örnekte kullanacağımız SOAP mesajına ait XML dokümanı yer almaktadır.

Header’a veri eklememizi sağlayacak olan XSLT dokümanına ait kaynak kodda aşağıda yer almaktadır.

Yukarıda yer alan kaynak kodları incelemek gerekirse “Identity Transform” alanı ile belirtilen kısımda yer alan “<xsl:template match=”@*|node()”>” ifade XSL’ in uygulanacağı doküman içerisinde yer alan bütün attribute’ leri ve bu doküman içerisinde yer alan tüm düğümleri kapsayacak bir şekilde bir işlem gerçekleştirir. <xsl:apply templates select=”@*|node()”/>” bu ifade ile de seçili olan bütün alanlara template’in uygulanmasını sağlar.

Artık SOAP Header içerisine veri ekleyeceğimiz kısma geldik. “<xsl:template match=”soapHeader”>” ifadesi ile header’ın içerisine yerleştik. Yapacağımız bütün değişikliklerin attribute ve node’larda uygulanması için <xsl:apply templates select=”@*|node()”/>” ifadesini kullandık.” Açıklama satırı altında yer alan kod parçalarıyla da “Header” içerisine istenen veriyi ekledik.

Şimdi ise “XML Transformer” aracımız üzerinde ilgili yerleri yukarıda anlattığımız kodlara göre dolduralım ve test edelim.

Yukarıdaki görselde de görüldüğü üzere, kırmızı dikdörtgen içerisinde yer alan “<soap:Header></soap:Header>” kısmının boş olduğunu görmekteyiz. Siyah dikdörtgen içerisinde yer alan kısımda ise bu alanın XSLT’ de oluşturduğumuz mesajla dolduğunu görmekteyiz.

Apinizer’da XSLT

Apinizer’ da veri paylaşım yöntemi XML olan servislerde XSLT dönüşüm politikası ile veri manipülasyonu yapılabilir. Bu kullanım ile örneğin backend servisinin ihtiyacı olan bir soap header bilgisi XML içerisine yerleştirilebilir ya da XML içerisinde yer alan bir verinin backend servise gitmemesi için ilgili kısmın silme işlemi yapılabilir.

Apinizer, çalışma anında XSLT scriptlerinin nasıl çalıştığı görebilmeniz için sahip olduğu online XSLT evaluator ile XML üzerinde test yapmanıza da imkan verir.

Apinizer API Yönetim Platformumuz hakkında daha fazla bilgi almak için buraya tıklayabilirsiniz.

Apinizer üzerinde XSLT dönüşümü hakkında bilgi almak için buraya tıklayabilirsiniz.

Diğer yazılarıma erişmek isterseniz XML için burayı, XSD için burayı, XPath için burayı tıklayabilirsiniz. Bir sonraki yazımda görüşmek dileğiyle.

--

--