Re[10]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 19:12
Оценка: 3 (1)
Здравствуйте, akotlyarov, Вы писали:

A>Решений больше нет никаких ?


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="data" mode="copy-exclude">
      <xsl:with-param name="exclude" select="//d | //f" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="@* | node()" mode="copy-exclude">
    <xsl:param name="exclude" />
    <xsl:if test="count($exclude | .) != count($exclude)">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="copy-exclude">
          <xsl:with-param name="exclude" select="$exclude" />
        </xsl:apply-templates>
      </xsl:copy>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>


Data:
<data>
  <line>
    <a>
      <b>
        <c />
        <d />
        <e />
        <f />
      </b>
    </a>
  </line>
</data>


Результат:
<data>
  <line>
    <a>
      <b>
        <c />
        
        <e />
        
      </b>
    </a>
  </line>
</data>
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 17:36
Оценка:
Привет !

В поиске нашел схожие вопросы, но как заимплементить мой — так и не понял).

Если не трудно расскажите или ткните носом.

Есть xml



<resultSearch>
<searchString>
some text
</searchSring>
......

<results>
<result1>
     <tag1>text</tag1>
     .............
</result1>
.............
</results>
</resultSearch>



Некий класс в результате своей работы формирует xsl, которая потом будет работать с этим xml.
Формируется xsl такого вида


<xsl:template match='/'>
 some text : <xsl:value-of select='//searchString'/> --     что то выводится.

?????????????
</xsl:template>


Вместо знаков ???? мне нужно подставить выражение которое бы копировало ноду results со всеми поднодами за исключением некоторой скажем resultX/excludedNode.
Что я думал — это применить копирование при помощи xsl:copy а потом заэксклюдить некоторую ноду.

НО. У меня в шаблоне уже есть template match — поэтому не нашел как заэксклюдить еще.

Всем спасибо
xsl:copy
Re: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 17:43
Оценка:
Здравствуйте, akotlyarov, Вы писали:

A>НО. У меня в шаблоне уже есть template match — поэтому не нашел как заэксклюдить еще.


Покажите, как вы делаете у себя в шаблоне. А то с нуля как-то влом писать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 17:57
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, akotlyarov, Вы писали:


A>>НО. У меня в шаблоне уже есть template match — поэтому не нашел как заэксклюдить еще.


L>Покажите, как вы делаете у себя в шаблоне. А то с нуля как-то влом писать.


Вот варианты которые можно заюзать.
Копирует ноды


<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="tag"/>           (*)


Но я ведь не могу вставить (*) внутрь уже существующего в моем шаблоне template match.
Re[3]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 18:01
Оценка:
Здравствуйте, akotlyarov, Вы писали:

L>>Покажите, как вы делаете у себя в шаблоне. А то с нуля как-то влом писать.


A>Вот варианты которые можно заюзать.

A>Копирует ноды


A>
A><xsl:template match="@*|node()">
A>  <xsl:copy>
A>    <xsl:apply-templates select="@*|node()"/>
A>  </xsl:copy>
A></xsl:template>
A><xsl:template match="tag"/>           (*)
A>


Он не работает?

A>Но я ведь не могу вставить (*) внутрь уже существующего в моем шаблоне template match.


Не совсем понял предложение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[4]: xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 18:11
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, akotlyarov, Вы писали:


L>>>Покажите, как вы делаете у себя в шаблоне. А то с нуля как-то влом писать.


A>>Вот варианты которые можно заюзать.

A>>Копирует ноды


A>>
A>><xsl:template match="@*|node()">
A>>  <xsl:copy>
A>>    <xsl:apply-templates select="@*|node()"/>
A>>  </xsl:copy>
A>></xsl:template>
A>><xsl:template match="tag"/>           (*)
A>>


L>Он не работает?


A>>Но я ведь не могу вставить (*) внутрь уже существующего в моем шаблоне template match.


L>Не совсем понял предложение.


Ну насколько я понял xsl:template не может содержать вложенного xsl:template
Re[5]: xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 18:21
Оценка:
Здравствуйте, akotlyarov, Вы писали:

Упс. Вдь можно использовать alias .. Я думаю тогда не будет конфликтов ?
Re[5]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 18:24
Оценка:
Здравствуйте, akotlyarov, Вы писали:

A>>>Но я ведь не могу вставить (*) внутрь уже существующего в моем шаблоне template match.


L>>Не совсем понял предложение.


A>Ну насколько я понял xsl:template не может содержать вложенного xsl:template


Теперь я не понял зачем его делать вложенным.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[6]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 18:24
Оценка:
Здравствуйте, akotlyarov, Вы писали:

A>Упс. Вдь можно использовать alias .. Я думаю тогда не будет конфликтов ?


Alias? А что это такое? Ты сейчас про xslt говоришь или про что-то другое?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[7]: xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 18:34
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, akotlyarov, Вы писали:


A>>Упс. Вдь можно использовать alias .. Я думаю тогда не будет конфликтов ?


L>Alias? А что это такое? Ты сейчас про xslt говоришь или про что-то другое?



Я про то что если в существующий шаблон


<xsl:template match='/'>
 some text : <xsl:value-of select='//searchString'/> --     что то выводится.

?????????????
</xsl:template>


вставить код "вырезки" xml то получится такой вот шаблон


<xsl:template match='/'>
 some text : <xsl:value-of select='//searchString'/> --     что то выводится.

     <xsl:template match="@*|node()">
        <xsl:copy>
           <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
     </xsl:template>
     <xsl:template match="tag"/> 
 </xsl:template>


Это ведь не валидно.

P.S. то что выделено курсивом — уже сформировано перед вставкой блока который выводит чать xml.

Но в w3c recommendation я прочитал что можно сделать так

<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>

<xsl:template match="/">
<axsl:stylesheet>
<xsl:apply-templates/>
</axsl:stylesheet>
</xsl:template>

<xsl:template match="block">
<axsl:template match="{.}">
<fo:block><axsl:apply-templates/></fo:block>
</axsl:template>
</xsl:template>

</xsl:stylesheet>
Re[8]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 18:37
Оценка:
Здравствуйте, akotlyarov, Вы писали:

A>Но в w3c recommendation я прочитал что можно сделать так


A><xsl:stylesheet

A> version="1.0"
A> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
A> xmlns:fo="http://www.w3.org/1999/XSL/Format"
A> xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">

A><xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>


A><xsl:template match="/">

A> <axsl:stylesheet>
A> <xsl:apply-templates/>
A> </axsl:stylesheet>
A></xsl:template>

A><xsl:template match="block">

A> <axsl:template match="{.}">
A> <fo:block><axsl:apply-templates/></fo:block>
A> </axsl:template>
A></xsl:template>

A></xsl:stylesheet>


это вообще о другом. эти алиасы нужны для того, чтобы с помощью xslt можно было генерить другие xslt. Но это не твой случай.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[9]: xsl:copy without some nodes
От: akotlyarov Россия  
Дата: 21.09.08 18:49
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, akotlyarov, Вы писали:


A>>Но в w3c recommendation я прочитал что можно сделать так


A>><xsl:stylesheet

A>> version="1.0"
A>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
A>> xmlns:fo="http://www.w3.org/1999/XSL/Format"
A>> xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">

A>><xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>


A>><xsl:template match="/">

A>> <axsl:stylesheet>
A>> <xsl:apply-templates/>
A>> </axsl:stylesheet>
A>></xsl:template>

A>><xsl:template match="block">

A>> <axsl:template match="{.}">
A>> <fo:block><axsl:apply-templates/></fo:block>
A>> </axsl:template>
A>></xsl:template>

A>></xsl:stylesheet>


L>это вообще о другом. эти алиасы нужны для того, чтобы с помощью xslt можно было генерить другие xslt. Но это не твой случай.


Сейчас мой вопрос понятен?

Решений больше нет никаких ?
Re[10]: xsl:copy without some nodes
От: Lloyd Россия  
Дата: 21.09.08 18:55
Оценка:
Здравствуйте, akotlyarov, Вы писали:

L>>это вообще о другом. эти алиасы нужны для того, чтобы с помощью xslt можно было генерить другие xslt. Но это не твой случай.


A>Сейчас мой вопрос понятен?


Более понятен, чем раньше.

A>Решений больше нет никаких ?


Будут. Погоди немного.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.