2009-01-14 26 views
6

XSL kodunu girmek için hangi kuralları kullanırsanız kullanın (varsa)?XSL/XPath Girinti

  • nasıl seçim XML editörü içine
  • bunları takabilirsiniz gerçekten uzun, karmaşık XPath'lerdeki ile anlaşma yapmak?
  • İşi iyi yapan bazı açık kaynak kodu var mı?

Bazı arka planlarda, Emacs'te nxml modunu kullanıyorum. Çoğunlukla onun Tamam ve alt öğeleri girilmelidir boşluk sayısını yapılandırabilirsiniz. Karmaşık XPaths söz konusu olsa da onun çok iyi değil. Benim kodunda uzun XPath varsa, ben şu anda elle yapmak zorunda ... Ancak, bu yapısı şöyle görünecektir yaparak mümkün olduğunca şeffaf olduğunu yapmak

<xsl:for-each select="/some 
         /very[@test = 'whatever'] 
         /long[@another-test = perhaps 
               /another 
               /long 
               /xpath[@goes='here']] 
         /xpath" 

gibi nxml sadece irade "/ some .." ile hizalayın "/ some .."

cevap

1

Bazen, her biri için şablonlar kullansanız bile (örneğin, yapabilmeniz gibi) daha uzun bir xpath önlenemez. Bu XSLT/XPath 2.0 özellikle doğrudur:

<xsl:attribute name="tablevel" 
    select="if (following::*[self::topic | self::part]) 
      then (following::*[self::topic | self::part])[1]/@tablevel 
      else @tablevel"/> 

Ben hatları boyunca bir "basit" yolunu kırmak için değil eğilimindedir, ancak operatörler ve koşullara bağlı olarak "büyük" yolunu kıracak.

Düzenleme için, Oxygen (çapraz platform) kullanıyorum ve bu tür boşluğu iyi işliyor. Bazen tam olarak ne istediğinizi tahmin etmez, ancak kodunuzu yeniden girseniz bile alanı bir kez orada tutacaktır.

+0

Kutsal yikes. Sanırım zamanların biraz gerisindeyim. – Ishmael

1

Kanaatimce, uzun xpath'ların okunması zor ve kaçınılmalıdır. Bunu yapmanın 2 yolu vardır:

  1. Kaynak xml'yi basitleştirin.
  2. Büyük şablonları küçük dosyalara bölün.
1

Xpath ifadelerini okumada güçlük çekiyorsam (ki çoğu zaman değil, ama bazen olur) XSL'yi bozma eğilimindeyim ... aslında ayrılma yöntemlerime oldukça benzer diğer diller için sözdizimi ... Yani söz konusu senin örneğin daha böyle bir şey haline gelebilir:

<xsl:for-each select="/some/very[@test = 'whatever']/long"> 
    <xsl:if test="@another-test = perhaps/another/long/xpath[@goes='here']"> 
    <xsl:for-each select="xpath"> 
     ... result xml .... 
    </xsl:for-each> 
    </xsl:if> 
</xsl:for-each> 
1

uzun XPath'leri kullanmayın. Her biri için hendek ve eşleme şablonlarını kullanın. Xpath'i birkaç şablona ayırın. Bir grup önemsiz maç şablonunu bunlardan birinden okumak daha kolay.

+0

Bu, performansı etkiler mi ve eğer etkilerse, ne kadar? – chiborg

+0

@chiborg, çoğu işlemciler XSL'yi derler, böylece fark “minimum” olmalıdır. Dil, şablon eşleme motoru olarak oluşturulmuştur, bu yüzden bu en uygun yaklaşım olmalıdır. Her neyse, XSL'de "düşünmeyi" öğrenmenin tek yolu bu. – Ishmael