На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> добавить пробелов в XML , с помощью XSLT преобразования
    Всем привет!
    на входе имеется XML-ина (плоский текст)
    ExpandedWrap disabled
      <ALL>
      <HEAD attrib="headmaster">
      текст1
      </HEAD>
      <BODY attrib1="123" attrib2="1234">
      текст2
      </BODY>
      </ALL>

    структура очень сложная и глубокая.
    С ней всё в порядке, кроме того, что хочется добавить пробелов
    В данном случае ALL не должен сдвинуться, HEAD и BODY - должены сдвинуться на 1 пробел, текст1 и текст2 - на 2 пробела. При этом HEAD могут быть как элементами первого уровня, так и пятого (это зависит от)
    Хочется сделать XSLT преобразование, только что то не совсем понятно как.

    Вот результат моей попытки:
    ExpandedWrap disabled
      <?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" />
            
          <xsl:template match ="HEAD">
              <xsl:variable name="indentation" select="count(ancestor::*)"></xsl:variable>
              <xsl:choose>
                  <xsl:when test='$indentation=1'>
          <HEAD>
      <xsl:apply-templates select = "*"/>
          </HEAD>  
                  </xsl:when>
                  <xsl:otherwise>
      <HEAD>
      <xsl:apply-templates select = "*"/>
      </HEAD>
                  </xsl:otherwise>
              </xsl:choose>    
              
          </xsl:template>
        
      </xsl:stylesheet>


    сразу видны проблемы:

    у меня получилось вот что в результате:

    ExpandedWrap disabled
      <HEAD>
          какой то текст
          </HEAD>


    сдвинулся на табуляцию второй HEAD, но не первый, это странно

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

    В общем, хотелось бы:
    1) задавать количество пробелов переменной (а не прописывать каждый choose)
    2) сделать код сразу обобщённым для всех типов узлов и типов атрибутов (не собирать их по кусочкам - геморно)
    3) откуда появляется доп. пробел?



    если вопрос дурацкий, не обессудьте - я на XSLT пишу всего второй день.
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0170 ]   [ 15 queries used ]   [ Generated: 27.04.24, 21:59 GMT ]