Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / XML, XSL, XPath, XQuery Новый топик    Ответить
 Xsl трансформация  [new]
vangok4322
Member

Откуда:
Сообщений: 3
Помогите разобраться:
Имеется такой Xml :
<bom titleTable="название" >
  <item itemId="090501029168" unitId="шт" itemPrice="67643">
    <month name="Январь">
      <itemName idx="0"  itemQty="4.0000" />
      <itemName idx="1" itemQty="4.0000" />
      <itemName idx="2" itemQty="2.0000" />
    </month>
    <month name="Февраль">
      <itemName idx="0" itemQty="3.0000" />
      <itemName idx="1" itemQty="6.0000" />
    </month>
    <month name="Март" />
    <month name="Апрель" />
    <month name="Май" />
    <month name="Июнь" />
    <month name="Июль" />
    <month name="Август" />
    <month name="Сентябрь" />
    <month name="Октябрь" />
    <month name="Ноябрь" />
    <month name="Декабрь" />
  </item>
  <item itemId="090501029173" unitId="шт" itemPrice="65464">
    <month name="Январь">
      <itemName idx="0" itemQty="2.0000" />
      <itemName idx="1" itemQty="10.0000" />
      <itemName idx="2" itemQty="40.0000" />
    </month>
    <month name="Февраль">
      <itemName idx="0" name="метла" itemQty="40.0000" />
      <itemName idx="1" name="метла" itemQty="12.0000" />
      <itemName idx="2" name="метла" itemQty="10.0000" />
      <itemName idx="3" name="метла" itemQty="2.0000" />
    </month>
    <month name="Март" />
    <month name="Апрель" />
    <month name="Май" />
    <month name="Июнь" />
    <month name="Июль" />
    <month name="Август" />
    <month name="Сентябрь" />
    <month name="Октябрь" />
    <month name="Ноябрь" />
    <month name="Декабрь" />
  </item>
</bom>


XSL:
<xsl:template mathc="bom">
   <xsl:for-each select="item">
			<xsl:sort order="ascending" select="@itemId"/>
			<Row>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"><xsl:value-of select="@itemId"/></Data></Cell>
				<Cell StyleID="s74"><Data Type="String"><xsl:value-of select="@unitId"/></Data></Cell>
				<Cell StyleID="s74"><Data Type="Number"><xsl:value-of select="@itemPrice"/></Data></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
				<Cell StyleID="s74"><Data Type="String"/></Cell>
			</Row>
			
		<xsl:apply-templates select="."/>
	</xsl:for-each>
</xsl:template>

<xsl:template match="item">
	<xsl:for-each select="month/itemName">
		<xsl:for-each select="preceding-sibling::itemName">
			<M>
				<xsl:value-of select="@idx"/>
			</M>
		</xsl:for-each>
		<xsl:choose>
			<xsl:when test="not(preceding::ItemName/@idx = ./@idx)">
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<xsl:apply-templates select="../../month">
					<xsl:with-param name="idx" select="@idx"/>
				</xsl:apply-templates>

				<Cell StyleID="s74" Index="19" ><Data Type="Number"/></Cell>
			</Row>
			</xsl:when>
		</xsl:choose>
	</xsl:for-each>		
	</xsl:template>
	
	<xsl:template match="month">
		<xsl:param name="idx"/>
		
		<Cell StyleID="s74">
		<xsl:choose>
			<xsl:when test="@name = 'Январь'">
				<xsl:attribute name="Index">7</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Февраль'">
				<xsl:attribute name="Index">8</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Март'">
				<xsl:attribute name="Index">9</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Апрель'">
				<xsl:attribute name="Index">10</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Май'">
				<xsl:attribute name="Index">11</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Июнь'">
				<xsl:attribute name="Index">12</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Июль'">
				<xsl:attribute name="Index">13</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Август'">
				<xsl:attribute name="Index">14</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Сентябрь'">
				<xsl:attribute name="Index">15</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Октябрь'">
				<xsl:attribute name="Index">16</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Ноябрь'">
				<xsl:attribute name="Index">17</xsl:attribute>
			</xsl:when>
			<xsl:when test="@name = 'Декабрь'">
				<xsl:attribute name="Index">18</xsl:attribute>
			</xsl:when>
		</xsl:choose>
		<xsl:if test="itemName[@idx = $idx]">
		<Data ss:Type="Number">
			<xsl:value-of select="itemName[@idx = $idx]/@itemQty"/>
		</Data>
		</xsl:if>
		</Cell>
		
	</xsl:template>
  </xsl:stylesheet>



Необходимо получить такую структуру:

<Row>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String">090501029168</Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String">шт</Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="Number"></Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
			</Row>
<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">3.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" >
					<Data Type="Number"/>
				</Cell>
			</Row>
			<M>0</M>
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">6.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" />
			</Row>
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">2.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8"/>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19">
					<Data Type="Number"/>
				</Cell>
			</Row>
29 ноя 12, 05:25    [13547059]     Ответить | Цитировать Сообщить модератору
 Re: Xsl трансформация  [new]
vangok4322
Member

Откуда:
Сообщений: 3
Собственно говоря надо получить вот такую структуру Для определенного итема должно идти так:
январь
февраль
Март
Апрель
....
Это если элементов itemName один, а в случае если несколько, тогда так
январь
февраль
Март
Апрель
....
январь
февраль
Март
Апрель
....
Уже 3-й день бьюсь с этим.((
В шаблоне итем уже и ограничивал с помощью preceding, но не получается вывести. На данном этапе она работает таким образом:
выводит хмл, который надо получить + добавляет первые два Row элемента.
То есть:
                         <Row>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String">090501029168</Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String">шт</Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="Number"></Data>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
				<Cell StyleID="s74">
					<Data Type="String"/>
				</Cell>
			</Row>
                        <Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">3.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" >
					<Data Type="Number"/>
				</Cell>
			</Row>
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">6.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" />
			</Row>
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">2.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8"/>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19">
					<Data Type="Number"/>
				</Cell>
			</Row>
                       <!--НАЧИНАЮТСЯ НЕ НУЖНЫЕ ЭЛЕМЕНТЫ-->
                        <Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">3.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" >
					<Data Type="Number"/>
				</Cell>
			</Row>
			<Row>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74"/>
				<Cell StyleID="s74" Index="7">
					<Data Type="Number">4.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="8">
					<Data Type="Number">6.0000</Data>
				</Cell>
				<Cell StyleID="s74" Index="9"/>
				<Cell StyleID="s74" Index="10"/>
				<Cell StyleID="s74" Index="11"/>
				<Cell StyleID="s74" Index="12"/>
				<Cell StyleID="s74" Index="13"/>
				<Cell StyleID="s74" Index="14"/>
				<Cell StyleID="s74" Index="15"/>
				<Cell StyleID="s74" Index="16"/>
				<Cell StyleID="s74" Index="17"/>
				<Cell StyleID="s74" Index="18"/>
				<Cell StyleID="s74" Index="19" />
			</Row>
                  <!--КОНЕЦ НЕ НУЖНЫХ ЭЛЕМЕНТОВ-->

Как от них избавиться не понимаю((
29 ноя 12, 05:37    [13547062]     Ответить | Цитировать Сообщить модератору
 Re: Xsl трансформация  [new]
vangok4322
Member

Откуда:
Сообщений: 3
Проблема решена.
29 ноя 12, 07:25    [13547129]     Ответить | Цитировать Сообщить модератору
Все форумы / XML, XSL, XPath, XQuery Ответить