2013-01-21 10 views
9
<node> 
    <node1><node11/></node1> 
    <node2/> 
</node> 

varsa benim XSLT herhangi cevap içinxsl: en az bir çocuk düğüm

<xsl:if test="If at least 1 child node exists"> 
    Only node1 can pass the if condition 
</xsl:if> 

Teşekkür kontrol etmek istiyorum.

cevap

19

İlk olarak, burada terminolojinize dikkat edin. "Düğüm" mü demek istiyorsun yoksa "element" mi demek istiyorsun? Bir düğüm, bir öğe, yorum, işleme-talimat metni olabilir. Burada elemanı demek eğer

neyse, sadece bu (Bu durumda düğüm elemanı üzerinde konumlandırılmış varsayarak yapabilirsiniz en az bir alt öğe var kontrol etmek.

<xsl:if test="*"> 

Sizin yorum test ettiğiniz düğüm bağlamında bu

<xsl:if test="node1"> 
+0

Cevabınız için teşekkür ederiz. Bu terimler arasında bir karışıklık var. Bir dahaki sefere daha dikkatli olacak –

3

yaramaz, yani belirli bir elemanın varlığını kontrol etmek, eğer koşul geçebilir ancak "Düğüm1" anlaşılacağı, bu bir düğüm olup olmadığını test etmek için çalışmalıdır çocuk elemanları:

<xsl:if test="*"> 
    Only node1 can pass the if condition 
</xsl:if> 

aslında demek düğümler (metin düğümlerini içerebilir), o zaman bu metin düğümlerini dahil etmek çalışacak ise: Ayrıca bu testi geçerdi

<xsl:if test="node()"> 
    Only node1 can pass the if condition 
</xsl:if> 

Ama <node> (<node2> wouldn 't). Sadece <node>'un çocuk düğümleri bağlamında konuştuğunuzu farz ettim, ama belki de değil? şey eşleşmeyen ifadeleri falsy iken bir düğüm maç

0

İfadeler yüzden, truthy şunlardır:

<xsl:if test="node()"> 
    ... 
</xsl:if> 

Ancak, soru ima durum "Sadece Node1 eğer koşulu geçebilir" dir örnekle oranlarda. Hem node hem de node1, çocuk düğümlerine sahiptir, bu nedenle her ikisi de koşullardan geçerse geçerdi.

Kesinlikle node1 ile sınırlamak için, şablon içeriğinin uygun olduğundan emin olmanız veya söz konusu düğümün documentElement öğesi olup olmadığını kontrol etmeniz gerekir.

0

sorunun ifadeler belirsizdir ama sadece kendileri çocuk (şimdiki düğümün yani torun) var mı çocuk düğümleri işlemek istiyorum düşünüyorum

<xsl:template match="node"> 
do stuff for node 
    <xsl:apply-templates select="*[*]"/> 
</xsl:template> 

o olduğu gibi sadece node1 için şablonlar uygulayacaktır Bir çocuk düğümü, şablonları node2'a uygulamaz.