Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

XSLT

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
ptybn84.07



Зарегистрирован: 15.12.2011
Сообщения: 1
Откуда: SPB

СообщениеДобавлено: Чт Дек 15 2011 12:50    Заголовок сообщения: XSLT Ответить с цитатой

Существует xml, вытащенный из Экселя, состоящий из повторяющихся полей с равным числом столбцов, но разным числом строк.
Если бы число сторк было бы равным(условно 4), то выглядел бы парсер так:
Код:
<?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" encoding="Windows-1251" indent="yes"  />
 <xsl:template match="NewDataSet">
 <root>
 <session title = "{форма[1]/F1}" start="{форма[1]/F5}" end="{форма[1]/F8}" /> 
 <company title="{форма[2]/F1}" name="{форма[3]/F1}
 {форма[3]/F3}" /> 
 <generation title = "{форма[4]/F1}" name = "{форма[4]/F3}"  />
 <station name ="{форма[5]/F3}"/> 
 <emptyLine name ="{форма[6]}"/>
 <emptyLine name ="{форма[7]}"/> 
 <xsl:for-each select="//форма[position() > 12]">
 <xsl:variable name="line" select="position()+12"/> 
 <xsl:if test="not(position() >(105-9))">
 <xsl:if test="(position()  mod 4 = 0)">   
 <summary        time ="{F1}"     value = "{F4}"        PMIN = "{F5}"      PMINSO = "{F6}"     PMAXSO = "{F7}"     OUT_IVR_VALUE = "{F8}"     OUT_UPSPEED = "{F9}"     OUT_DOWNSPEED = "{F10}"     RD = "{F11}"      OUT_RSV_AVG_PRICE = "{F13}"     OUT_RSV_SELL_VALUE = "{F14}"      OUT_RSV_SELL_PRICE = "{F15}"     OUT_RSV_RD_BUY_VALUE = "{F16}"     OUT_RSV_RD_BUY_PRICE = "{F17}"      OUT_SDD_BUY_VALUE = "{F18}"     OUT_SDD_BUY_PRICE = "{F19}"     OUT_SDD_SELL_VALUE = "{F20}"     OUT_SDD_SELL_PRICE = "{F21}"     />     
 </xsl:if>
 <xsl:if test="(position()  mod 4 = 1)">   
 <row time ="{//форма[$line+3]/F1}"     OUT_PSTAGE1_PRICE="{F3}"        OUT_PSTAGE1_VALUE = "{F4}"        PMIN = "{F5}"      PMINSO = "{F6}"     PMAXSO = "{F7}"     value8 = "{F8}"      value9 = "{F9}"     value10 = "{F10}"     RD = "{F11}"      OUT_RSV_AVG_PRICE = "{F13}"     OUT_RSV_SELL_VALUE = "{F14}"      OUT_RSV_SELL_PRICE = "{F15}"     OUT_RSV_RD_BUY_VALUE = "{F16}"     OUT_RSV_RD_BUY_PRICE = "{F17}"      OUT_SDD_BUY_VALUE = "{F18}"     OUT_SDD_BUY_PRICE = "{F19}"     OUT_SDD_SELL_VALUE = "{F20}"     OUT_SDD_SELL_PRICE = "{F21}"     value22 = "{F22}"     value23 = "{F23}"     STAGE2_PRICE = "{F24}"     STAGE2_VALUE = "{F25}"     />   
 </xsl:if> 
 <xsl:if test="(position()  mod 4 = 2)">      <row time ="{//форма[$line+2]/F1}"     OUT_PSTAGE2_PRICE="{F3}"        OUT_PSTAGE2_VALUE = "{F4}"     PMIN = "{F5}"      PMINSO = "{F6}"     PMAXSO = "{F7}"     value8 = "{F8}"      value9 = "{F9}"     value10 = "{F10}"     RD = "{F11}"      OUT_RSV_AVG_PRICE = "{F13}"     OUT_RSV_SELL_VALUE = "{F14}"      OUT_RSV_SELL_PRICE = "{F15}"     OUT_RSV_RD_BUY_VALUE = "{F16}"     OUT_RSV_RD_BUY_PRICE = "{F17}"      OUT_SDD_BUY_VALUE = "{F18}"     OUT_SDD_BUY_PRICE = "{F19}"     OUT_SDD_SELL_VALUE = "{F20}"     OUT_SDD_SELL_PRICE = "{F21}"     value22 = "{F22}"     value23 = "{F23}"     STAGE3_PRICE = "{F24}"     STAGE3_VALUE = "{F25}"     /> 
 </xsl:if> 
 <xsl:if test="(position()  mod 4 = 3)">      <row time ="{//форма[$line+1]/F1}"     OUT_PSTAGE3_PRICE="{F3}"        OUT_PSTAGE3_VALUE = "{F4}"     PMIN = "{F5}"      PMINSO = "{F6}"     PMAXSO = "{F7}"     value8 = "{F8}"      value9 = "{F9}"     value10 = "{F10}"     RD = "{F11}"      OUT_RSV_AVG_PRICE = "{F13}"     OUT_RSV_SELL_VALUE = "{F14}"      OUT_RSV_SELL_PRICE = "{F15}"     OUT_RSV_RD_BUY_VALUE = "{F16}"     OUT_RSV_RD_BUY_PRICE = "{F17}"      OUT_SDD_BUY_VALUE = "{F18}"     OUT_SDD_BUY_PRICE = "{F19}"     OUT_SDD_SELL_VALUE = "{F20}"     OUT_SDD_SELL_PRICE = "{F21}"     value22 = "{F22}"     value23 = "{F23}"     STAGE4_PRICE = "{F24}"     STAGE4_VALUE = "{F25}"     />   
 </xsl:if>
 </xsl:if>   
 </xsl:for-each> 
 </root>
 </xsl:template> 
 </xsl:stylesheet>

Но число строк может меняться (4 или 5). Помогите переписать парсер для этого случая. Голову ломаю - а получается либо простыня, либо не пашет((((
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...