2009-01-14 28 views
6

Lo convenciones (si lo hay) ¿utiliza para sangrar el código XSL?XSL/XPath sangría

  • , ¿cómo lidiar con muy largos, complicados XPaths
  • se les enchufe en su editor de XML de elección?
  • ¿Hay algún código fuente abierto que hace bien el trabajo?

Para algunos antecedentes, uso nxml-mode en Emacs. En general, está bien y puede configurar el número de espacios que los elementos secundarios deben sangrar. Aunque no es muy bueno cuando se trata de XPaths complicados. Si tengo un largo XPath en mi código, me gustaría hacer su estructura lo más transparente posible, haciendo que se vea algo como esto ...

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

Sin embargo, actualmente no tengo que hacerlo manualmente como se acaba de nxml alinear todo con el "/ alguna .."

Respuesta

1

veces un XPath ya no se puede evitar, incluso si se utiliza en lugar de las plantillas para-eaches (como debe ser, si es posible). Esto es especialmente cierto en XSLT/XPath 2.0:

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

no tienden a romper un camino "simple" a través de líneas, pero romperá el "mayor" camino a operadores o condicionales.

Para la edición, uso de oxígeno (que es multiplataforma) y que se encarga de este tipo de espaciado bastante bien. A veces no predice exactamente lo que quieres, pero mantendrá el espacio una vez que esté allí, incluso si vuelves a indentificar tu código.

+0

Santos sagrados. Creo que estoy un poco atrasado en los tiempos. – Ishmael

1

En mi opinión, XPaths largas son difíciles de leer y deben evitarse. Hay 2 formas de hacerlo:

  1. Simplifica el xml fuente.
  2. Divide las plantillas grandes en otras más pequeñas.
1

Tiendo a descomponer el XSL de manera diferente si tengo dificultades para leer las declaraciones xpath (que no es muy frecuente, pero sucede ocasionalmente) ... en realidad es bastante similar a mis métodos de separación sintaxis para otros idiomas ... Así que su ejemplo en la pregunta podría llegar a ser algo más parecido a esto:

<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

no utilice XPaths largos. Elimine el for-each y use las plantillas de coincidencia. Divide el xpath en varias plantillas. Es mucho más fácil leer un montón de plantillas de coincidencias triviales que una de estas.

+0

¿Afectará esto el rendimiento, y si lo afecta, cuánto? – chiborg

+0

@chiborg, la mayoría de los procesadores compilarán XSL, por lo que la diferencia "debería" ser mínima. El lenguaje se construyó como un motor de comparación de plantillas, por lo que este debería ser el enfoque óptimo. De todos modos, es la única forma en que puedes aprender a "pensar" en XSL. – Ishmael