powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / разбор excel xml
8 сообщений из 8, страница 1 из 1
разбор excel xml
    #34780421
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите пожалуйста,

вот есть у меня структура (дитя excel'a)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<table>
 <row>
  <cell>a</cell>
  <cell>b</cell>
  <cell>v</cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 2 </cell>
  <cell> 3 </cell>
 </row>
 <row>
  <cell> 4 </cell>
  <cell> 5 </cell>
  <cell> 6 </cell>
 </row>
<table>

cellы без атрибутов, row тоже

с помощью какого xsl преобразования все это превратить в
<data>
<a>1</a>
<b>2</b>
<c>3</c>
</data>
<data>
<a>4</a>
<b>5</b>
<c>6</c>
</data>

? ну или ткните лицом в ссылку(
...
Рейтинг: 0 / 0
разбор excel xml
    #34780476
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:template match="/">
    <body>
     <i>
     <xsl:apply-templates select="//Row"/>
     </i>
    </body>
</xsl:template>

<xsl:template match="ss:Row">
         <data><xsl:for-each select="Cell">
          <name><xsl:value-of select="."/></name>
         </xsl:for-each>
         </data>
</xsl:template>

вот как это превратить в то что мне нужно? а то пока получить могу только
Код: plaintext
1.
2.
3.
4.
5.
<data>
        <name> 1000 </name>
        <name> 2007 - 01 -01T00: 00 : 00 . 000 </name>
        <name>Данные  1 </name>
      </data>

значит надо 1й row пропустить (при условии, что имена заголовков таблицы я знаю), а след. каким-то образом обработать..
...
Рейтинг: 0 / 0
разбор excel xml
    #34780515
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну все просто, как оказалось

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  <xsl:template match="/">
    <body>
     <i>
     <xsl:apply-templates select="//Row"/>
     </i>
    </body>
</xsl:template>

<xsl:template match="ss:Row">
         <data>
         <xsl:for-each select="Cell">
         <xsl:if test="position()=1">
          <name><xsl:value-of select="."/></name>
          </xsl:if>
         <xsl:if test="position()=2">
          <date><xsl:value-of select="."/></date>
          </xsl:if>
         <xsl:if test="position()=3">
          <num><xsl:value-of select="."/></num>
          </xsl:if>
         </xsl:for-each>
         </data>
</xsl:template>
...
Рейтинг: 0 / 0
разбор excel xml
    #34782782
baggystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в развитие, не совсем по исходной задаче, но думаю, что многим пригодится в качестве основы

здесь предполагается, что в первой строке содержатся имена XML-элементов

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:template match="table">
        <table>
            <xsl:apply-templates/>
        </table>
    </xsl:template>
    
    <xsl:template match="row[1]"/>

    <xsl:template match="row">
        <data>
            <xsl:apply-templates/>
        </data>
    </xsl:template>
   
   <xsl:template match="cell">
       <xsl:variable name="col-num" select="count(preceding-sibling::cell) + 1"/>
       <xsl:element name="{/table/row[1]/cell[$col-num]}">
           <xsl:apply-templates/>
       </xsl:element>
   </xsl:template>
</xsl:stylesheet>

на данных

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="UTF-8"?>
<table>
    <row>
        <cell>name1</cell>
        <cell>name2</cell>
        <cell>name3</cell>
    </row>
    <row>
        <cell> 1 </cell>
        <cell> 2 </cell>
        <cell> 3 </cell>
    </row>
    <row>
        <cell> 4 </cell>
        <cell> 5 </cell>
        <cell> 6 </cell>
    </row>
</table>

получаем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?><table>
    
    <data>
        <name1> 1 </name1>
        <name2> 2 </name2>
        <name3> 3 </name3>
    </data>
    <data>
        <name1> 4 </name1>
        <name2> 5 </name2>
        <name3> 6 </name3>
    </data>
</table>

если что - пишите, подправлю
...
Рейтинг: 0 / 0
разбор excel xml
    #34783229
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
очень здорово
вот только может сохранить изначально в вариаблы имена этих полей, чтобы каждый раз прогоняя цикл не считывать значения ячеек первой строки.. хотя хз как там это все работает и будет ли это быстрее.
...
Рейтинг: 0 / 0
разбор excel xml
    #34783639
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  <xsl:variable name="RowNames" select="//ss:Row[1]"/>
...
   <xsl:for-each select="ss:Cell">
     <xsl:if test="position()=1">
       <xsl:element name="{$RowNames/ss:Cell[1]}">
       <xsl:value-of select="."/>
       </xsl:element>
     </xsl:if>
   </xsl:for-each>

почему ошибко?( точнее как правильно вариябл туда всунуть?
...
Рейтинг: 0 / 0
разбор excel xml
    #34784883
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
область видимости
...
Рейтинг: 0 / 0
разбор excel xml
    #34784888
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoобласть видимости

точно )) спасибо)
решил пользовать параметры
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / разбор excel xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]