xslt

2016-03-19 28 views
0

Ben aşağıdaki XML Kodu:xslt

<root> 
<Kursstamm> 
    <Texteinmischdefinitionen> 
     <Texteinmischung Typ="Text" Position="Vorlauftext">Text A</Texteinmischung> 
    </Texteinmischdefinitionen> 
    <KursstammID>Text B 
</KursstammID> 
<Kursstammtitel>Text C</Kursstammtitel> 
<Kurztext>Text D</Kurztext> 
<Kursgebühr>Price</Kursgebühr> 
<Trainerprosa>Text E</Trainerprosa> 
    <Texteinmischdefinitionen> 
    <Texteinmischung Typ="Text" Position="Hinweistext">Text F </Texteinmischung> 
    </Texteinmischdefinitionen> 
</Kursstamm> 
</root> 

Ve ben XSLT ile işlemek istiyorum:

Text A 
Text B 
Text C 
Text D 
Text E 
Text F 

Ben Metin A'nın ile ilgili sorunlar ve Metin F!

bu XSLT kullanabilirsiniz:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/> 
<xsl:template match="/root/Kursstamm"> 
<xsl:copy-of select="Texteinmischung[@Typ='Vorlauftext']" /> 
<xsl:copy-of select="KursstammID"/> 
<xsl:copy-of select="Kurztext"/> 
<xsl:copy-of select="Kursgebühr"/> 
<xsl:copy-of select="Trainerprosa"/> 
<xsl:copy-of select="Nachlauf"/> 
<xsl:copy-of select="Texteinmischung[@Typ='Hinweistext']" /> 
</xsl:template> 
</xsl:stylesheet> 

Ama

<Texteinmischung Typ="Text" Position="Vorlauftext"> 

veya

<Texteinmischung Typ="Text" Position="Hinweistext"> 

nasıl özelliklere sahip etiketleri alabilirsiniz bulamadık?

Yardımlarınız için teşekkür ederiz! sorunlu copy-of için

+0

Eğer '@ Tipi = "Hinweistext"' ile bir şey sorarsanız, neden bulmak beklenir @ Position = "Hinweistext" 'ile bir şey? –

cevap

1

yerine deneyin: o noktada bağlam düğüm bir Kursstamm öğesidir

<xsl:copy-of select=".//*[@Typ]" /> 

(çünkü ve bir "Typ" özelliğine sahip olanlar Texteinmischung en kapmak için, gitmek gerekir bu durumda ".//*" dolayısıyla kullanımı)

+0

Yapıda her zaman tüm etiketler kullanılabilir olduğunda çalışır. Benim XML'imde maalesef durum böyle değil. – user2211417

+0

Üzgünüz - yeniden: Yapıda her zaman tüm etiketler kullanılabilir olduğunda çalışır. Benim XML'imde maalesef durum böyle değil. Bu yüzden yok ( Text F ) "F" - o konumdaki bir "Metin A" olduğunda elde ederim! Ben nitelik eter Typ = "Metin" pozisyonu belirtmek gerekir = "Vorlauftext" veya Typ = "Metin" Pozisyon = "Hinweistext" Yardımlarınız için teşekkürler! – user2211417

1

YSharp size belirli soruna cevap vermiş

'HTH, ama; Kursstamm en torunu ekseninde derin, sadece doğrudan çocukları olsun başka bir yaklaşım olduğunu bilmek isteyebilir XSLT'nin built-in templates rules avantajından yararlanır. İhtiyacınız olan tek şey, çeşitli metin düğümlerini çıkarmaksa, metni bir satır sonu ile çıkardığınız metin düğümleriyle eşleşen tek bir şablona sahip olmanız yeterlidir. Kullanım xsl:strip-space white-space sadece düğümleri görmezden

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match="text()"> 
     <xsl:value-of select="normalize-space()" /> 
     <xsl:text>&#10;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

Not:

bu XSLT deneyin.

sen Kursgebühr sadece bu gibi ekstra bir şablon eklemek gibi belirli unsurları görmezden isteseydik:

<xsl:template match="Kursgebühr" /> 
+0

İpucu için teşekkürler! – user2211417