Помогите написать xsl начинающему
От: NVO  
Дата: 25.03.08 05:08
Оценка:
Есть xml-файл. Надо изменить его структуру. Пользуюсь xslt-преобразованиями.
Что пока не получается:
1. Если в начальном файле есть такая вершина, то перенести ее без изменений. Если вершины нет, то в конечном файле ее тоже не должно быть.
2. В начальном файле есть несколько вершин с известным заранее именем. В конечном файле они все должны попасть в качестве дочерних в новую вершину.
Подскажите, пожалуйста, как такие вещи делаются.
Пример.
Было:
<node>
<node1>111</node1>
<node21>2-1</node21>
<node22>2-2</node22>
</node>
Должно получиться:
<result>
<node1>111</node1>
<node2>
<node21>2-1</node21>
<node22>2-2</node22>
</node2>
</result>
Re: Помогите написать xsl начинающему
От: Lloyd Россия  
Дата: 25.03.08 08:44
Оценка:
Здравствуйте, NVO, Вы писали:

NVO>Должно получиться:

NVO><result>
NVO><node1>111</node1>
NVO><node2>
NVO> <node21>2-1</node21>
NVO> <node22>2-2</node22>
NVO></node2>
NVO></result>

Откуда взялось node2?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Помогите написать xsl начинающему
От: NVO  
Дата: 26.03.08 06:28
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Откуда взялось node2?


Это, так сказать, метаданные. Т.е. известно заранее, что все вершины <node21> и <node22> (и только с этими именами), должны оказаться в <node2>. Это не из входного файла берется.
Re[3]: Помогите написать xsl начинающему
От: Lloyd Россия  
Дата: 26.03.08 07:31
Оценка: :)
Здравствуйте, NVO, Вы писали:

L>>Откуда взялось node2?


NVO>Это, так сказать, метаданные. Т.е. известно заранее, что все вершины <node21> и <node22> (и только с этими именами), должны оказаться в <node2>. Это не из входного файла берется.


Так что-ли?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <result>
      <xsl:copy-of select="//node1"/>
      <node2>
        <xsl:copy-of select="//node21"/>
        <xsl:copy-of select="//node22"/>
      </node2>
    </result>
  </xsl:template>
</xsl:stylesheet>
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: Помогите написать xsl начинающему
От: NVO  
Дата: 01.04.08 04:56
Оценка:
L>Так что-ли?
L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:template match="/">
L>    <result>
L>      <xsl:copy-of select="//node1"/>
L>      <node2>
L>        <xsl:copy-of select="//node21"/>
L>        <xsl:copy-of select="//node22"/>
L>      </node2>
L>    </result>
L>  </xsl:template>
L></xsl:stylesheet>
L>


Да. Именно так. Два слэша решили ролблему )))
Re[4]: Помогите написать xsl начинающему
От: NVO  
Дата: 01.04.08 05:00
Оценка:
Стоп!
При таком варианте <node2> всегда в документе будет, а мне надо, чтобы она появлялась только в том случае, если есть хотя бы одна из <node21> или <node22>
Re[5]: Помогите написать xsl начинающему
От: Lloyd Россия  
Дата: 01.04.08 05:33
Оценка:
Здравствуйте, NVO, Вы писали:

NVO>Стоп!

NVO>При таком варианте <node2> всегда в документе будет, а мне надо, чтобы она появлялась только в том случае, если есть хотя бы одна из <node21> или <node22>

Добавь <xsl:if test="//node21 | //node22">
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[6]: Помогите написать xsl начинающему
От: NVO  
Дата: 01.04.08 06:02
Оценка:
L>Добавь <xsl:if test="//node21 | //node22">
А куда? Не будет в этом случае несколько вершин <node2>?
Re[7]: Помогите написать xsl начинающему
От: Lloyd Россия  
Дата: 01.04.08 06:13
Оценка:
Здравствуйте, NVO, Вы писали:

L>>Добавь <xsl:if test="//node21 | //node22">

NVO>А куда?

В xsl, вестимо.

NVO>Не будет в этом случае несколько вершин <node2>?


Блин ну детский сад, право! Ну конечно же их будет несколько! Ты же написал node2, ну вот так и получай несколько!
Подробности — в спеке.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[8]: Помогите написать xsl начинающему
От: NVO  
Дата: 01.04.08 07:28
Оценка:
L>Блин ну детский сад, право! Ну конечно же их будет несколько! Ты же написал node2, ну вот так и получай несколько!
Шутишь все
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.