Отступ XSL / XPath - PullRequest
       24

Отступ XSL / XPath

6 голосов
/ 14 января 2009

Какие условные обозначения (если таковые имеются) вы используете для отступа кода XSL?

  • как вы справляетесь с действительно длинными сложными XPaths
  • Вы можете подключить их в свой XML-редактор по вашему выбору?
  • есть ли какой-нибудь открытый исходный код, который хорошо выполняет свою работу?

Для некоторого фона я использую nxml-режим в Emacs. По большей части все в порядке, и вы можете настроить количество пробелов, которые должны иметь отступы дочерних элементов. Это не очень хорошо, хотя, когда дело доходит до сложных XPath. Если в моем коде длинный XPath, мне бы хотелось сделать его структуру максимально прозрачной, сделав ее похожей на эту ...

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

Однако в настоящее время я должен сделать это вручную, так как nxml просто выровняет все это с "/some.."

Ответы [ 4 ]

1 голос
/ 06 февраля 2009

Иногда нельзя избежать более длинного xpath, даже если вы вместо шаблонов используете шаблоны (как следует, если можете). Это особенно верно в 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"/>

Я стараюсь не ломать «простой» путь через строки, но ломаю «больший» путь у операторов или условных выражений.

Для редактирования я использую Oxygen (кроссплатформенный), и он довольно хорошо справляется с такими интервалами. Иногда он не может точно предсказать, что вы хотите, но он сохранит пространство, как только он там появится, даже если вы сделаете отступ в коде.

1 голос
/ 17 января 2009

Я склонен ломать XSL по-разному, если у меня возникают трудности с чтением операторов xpath (что не очень часто, но иногда случается) ... на самом деле это довольно похоже на мои методы разбиения синтаксиса для других языки ... Таким образом, ваш пример в вопросе может стать чем-то вроде этого:

<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 голос
/ 06 февраля 2009

Не используйте длинные xpaths. Откажитесь от каждого и используйте шаблоны матчей. Разбейте xpath на несколько шаблонов. Гораздо проще прочитать несколько шаблонов совпадений, чем один из них.

1 голос
/ 17 января 2009

На мой взгляд, длинные xpath трудно читать и их следует избегать. Есть 2 способа сделать это:

  1. Упрощение исходного XML.
  2. Разделите большие шаблоны на более мелкие.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...