Belirli koşullara uyulursa, düğümleri XSLT kullanarak bir seviye yukarı taşımayı öğrenmek istiyorum. Bir örnek vermek gerekirse şu XML kaynağında bir göz:XSLT: Düğüm bir seviye yukarı git
durumun başlangıç olarak ben XML olduğunu<Settings>
<String [...]>
<Boolean [...]/>
</String>
</Settings>
. Açık olması gerekirse, düğüm adları "Ayarlar", "Dize", "Boole", tanımladığımız özel düğümlerdir.
Sorun, "Boole" düğümlerinin "Dize" düğümlerinin içine girmesine izin verilmemesidir. Bu yüzden bu "Boolean" düğümlerini yukarı kaldırmak zorundayım. İstenilen XML şu şekilde görünecektir:
<Settings>
<String [...]></String>
<Boolean [...]/>
</Settings>
XSLT da ne olursa olsun XML ağacında konumu nedeniyle, bir kardeş Boole düğümü olan her dize düğümü ile çalışmak zorundadır.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Identity rule -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- special rules ... -->
</xsl:stylesheet>
Ben ile mücadele ediyorum şeydir:
Şimdiye kadar ilk istenilen dönüşümleri için bazı özel kurallar geçerlidir daha sonra bir "kimlik kuralı" kullanarak XML tüm kopyalayıp zorunda öğrendik "String" düğümlerinin kardeşleri olan tüm "Boolean" düğümlerini bir seviye yukarı kaldırmaya karar ver. Bunu nasıl yapabilirim?!?
İyi soru, +1. "Kimlik kuralını geçersiz kıl" tasarım deseninin bir varyasyonu için cevabımı görün - biraz daha doğru bir geçersiz kılma sağladım. :) –