2011-08-22 19 views
6

XML dosyasını HTML'ye dönüştürmek için XslCompiledTransform kullanıyorum. Kendi kendine kapanma etiketlerini kullanmasını engelleyebileceğim bir yol var mı?XslCompiledTransform'un kendi kendine kapanış etiketleri kullanmasını engelle

örn. yayılma en üstünde

<span></span> <!-- I want this even if content empty --> 
<span/> <!-- stop doing this! -> 

kendiliğinden kapanan etiketler geçerli XML olsa, bu yayılma 'kendiliğinden kapanan etiketler olmasına izin verilmez sadece var, ne olursa olsun ben hangi tarayıcıyı kullanırsanız kullanın Dokümanımı kadar uğraşıyorsun.

Kendiliğinden kapanan etiketlerin kullanılmasını önlemek için xsl veya C# .Net koduma koyabileceğim bir ayar var mı?

+0

Öznitelik veya içeriğe sahip olmayan bir açıklık tamamen görünmez olmalıdır. Yayınınızı bir xsl'ye sarmak ister misiniz? İçerik kontrol etmek için blok sizin için çalışıyor mu? –

+0

Doğru terim kendi kendine kapanma etiketleri. –

+0

İyi soru, +1. İki alternatif çözüm için cevabımı görün. –

cevap

0

<xsl:output method="html"/>, deneyebilirsiniz, ancak sonuç artık iyi oluşturulmuş bir XML belgesi olmayacaktır.

Veya, XmlWriter Kendi parametrelerden biri olarak XslCompiledTransform.Transform() yöntem geçen çağırabilirsiniz. Uygulamanızda tam kontrole sahipsiniz ve sonuç ağacının gerekli herhangi bir serileştirmesini uygulayabilirsiniz.

+1

Bu, çıkış yöntemi = "html" ile bile geçersiz üretir. – Sheamus

+0

@Sheamus: O zaman kesinlikle XmlWriter'inizin ayarlarını değiştirmeli ve/veya cevap vermemde tavsiye ettiğim gibi sınıfınızı XmlWriter'i yazmalısınız. –

0

XSLT ürününüzde <xsl:output method="html"/> kullanın ve sonra HTML sonuç öğelerinizin stil sayfanızın hiçbir ad alanında olmadığından emin olun. Ayrıca, C# kodunuzda XslCompiledTransform'u nasıl kullandığınıza bağlı olarak, stil sayfasındaki xsl:output ayarlarının onurlandırıldığından emin olmanız gerekir. Bunu bir dosyaya veya akışa veya TextWriter'e dönüştürerek kolayca başarabilirsiniz, bu durumda hiçbir şey yapılmamalıdır. Bununla birlikte, bazı nedenlerden dolayı bir XmlWriter'e dönüşürseniz, uygun ayarlarla oluşturulduğundan emin olmanız gerekir.

XslCompiledTransform proc = new XslCompiledTransform(); 
proc.Load("sheet.xsl"); 

using (XmlWriter xw = XmlWriter.Create("result.html", proc.OutputSettings)) 
{ 
    proc.Transform("input.xml", null, xw); 
} 

Ama genelde sadece C# kodu bu durumda hiçbir şey, bir Stream veya TextWriter dönüşerek iyi olmalı stil çıkış yöntemini onurlandırmak için yapılmalıdır.

+2

hala üretilmektedir. – Sheamus

0

Bulduğum tek çözüm, XSL dosyasına mantık eklemektir. Temel olarak, yayılma etrafını sarmak istediğim elemanlar boşsa, span öğesini hiç kullanmayın.

<xsl:if test="count(jar/beans) > 0"> 
    <xsl:apply-templates select="jar/beans"/> 
</xsl:if> 

İdeal Değil ben çıkış yöntemi "html" seçim olsa bile, isteyerek daha yasadışı HTML üretecektir gerçeğini telafi etmek için, benim xsl dosyası her yerde bu eklemek zorunda kalmak.

Sigh.

1

Bunu doğrudan bir çözüm olarak sınıflandıramasam da (boş bir öğe yaymadığı için), kullandığım geçici çözüm, öğeye boşluk (xsl: text kullanarak) koymaktı. HTML biçimlendirmesi ve Standartlar modunu (quirks değil) etkinleştiriyorsanız, ekstra alan oluşturulan içeriği değiştirmez. Ayrıca dönüşüm nesnesinin çağrılması üzerinde de kontrolüm yoktu.

<div class="clearBoth"><xsl:text> </xsl:text></div> 
İlgili konular