Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Использование XSLT для извлечения данных из XML / 7 сообщений из 7, страница 1 из 1
17.06.2009, 11:07
    #36045386
Guest_102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
Народ подскажите, как можно с помощью XSLT достать значение «Результат 3» из XML-файла примерно с такой с структурой:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
<w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2" />
<w:body>
<wx:sect>
<wx:sub-section>
<w:tbl>
<w:tc>
<w:p wsp:rsidR="00A276F5" wsp:rsidRDefault="00A276F5">
<w:r>
<w:t>2</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p wsp:rsidR="00A276F5" wsp:rsidRDefault="00A276F5">
<w:r>
<w:t>Текст 3</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2393" w:type="dxa" />
</w:tcPr>
<w:p wsp:rsidR="00A276F5" wsp:rsidRDefault="00A276F5">
<w:r>
<w:t>14.02.2009</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2393" w:type="dxa" />
</w:tcPr>
<w:p wsp:rsidR="00A276F5" wsp:rsidRDefault="00A276F5">
<w:r>
<w:t> Результат 3 </w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
<w:p wsp:rsidR="00A276F5" wsp:rsidRPr="00A276F5" wsp:rsidRDefault="00A276F5" />
</wx:sub-section>
</wx:sect>
</w:body>
</w:wordDocument>
...
Рейтинг: 0 / 0
21.06.2009, 13:18
    #36052583
Grundiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
<занудство>
Во-первых код надо оформлять как следует -- с отступами и подсветками. Не находите что было бы неплохо облегчить задачу людям, которые собираются вам помочь? ;)
Во-вторых -- XSLT данные только оформляет , а извлекает их XPath.
</занудство>
Получается вам нужно составить выражение XPath? А сами вы по какому критерию тогда нашли этот самый результат-3?
Ну, вот такой вариант есть:
Код: plaintext
1.
<xsl:value-of select="/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tc[4]/w:p/w:r/w:t/text()"/>
Этот путь берет четвертый ([4]) элемент w:tc из ветки /w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl и вычисляет дальше значение w:p/w:r/w:t/text()
...
Рейтинг: 0 / 0
22.06.2009, 13:16
    #36053583
Guest_102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
Grundiss, попытался сделать как ты сказал, определил XSL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
 <xsl:output method="xml" indent="yes" />
 <xsl:template match="/">
    <xsl:value-of select="/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tc[4]/w:p/w:r/w:t/text()"/>
  </xsl:template>
</xsl:stylesheet>

Но при загрузке вордового xml появляется ошибка:
Reference to undeclared namespace prefix: 'wx'.


Есть еще вариант:
Код: 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 version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
 <xsl:output method="xml" indent="yes" />
 <xsl:template match="/">
  <xsl:processing-instruction name="mso-application">
   <xsl:text>progid="Word.Document"</xsl:text>
  </xsl:processing-instruction>
  <w:wordDocument>
   <w:body>
     <xsl:apply-templates select="Courses/Course" />
   </w:body>
  </w:wordDocument>
 </xsl:template>
 <xsl:template match="Course">
    <w:p>
     <w:r>
      <w:t>
         <xsl:value-of select="Title"/>
      </w:t>
     </w:r>
    </w:p>
 </xsl:template>
</xsl:stylesheet>

Но опять же не знаю, как в этом случае быть, чтоб взять нужный элемент.
...
Рейтинг: 0 / 0
22.06.2009, 13:55
    #36053686
Guest_102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
Получилось выводить данные, xsl стал такого вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
 xmlns:w10="urn:schemas-microsoft-com:office:word" 
 xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" 
 xmlns:aml="http://schemas.microsoft.com/aml/2001/core" 
 xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
 <xsl:output method="xml" indent="yes" />
 <xsl:template match="/">
	<xsl:value-of select="/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tr"/>
	<xsl:text>;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

Только данные выводятся в таком виде:
2Текст 314.02.2009Результат 3;

А хотелось бы чтоб выводились в виде:
2;Текст 3;14.02.2009;Результат 3;

Может кто знает как это сделать?
...
Рейтинг: 0 / 0
22.06.2009, 16:26
    #36054165
Guest_102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
И еще вопрос, если я использую код такого вида
Код: plaintext
/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tr[last()]
то возвращается значение последнего узла.
А как можно узнать номер последнего узла?
Использование [last()] и last() дает разные результаты, а хотелось бы иметь возможность получать [last()].
...
Рейтинг: 0 / 0
22.06.2009, 23:46
    #36054746
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
Guest_102А хотелось бы чтоб выводились в виде:
2;Текст 3;14.02.2009;Результат 3;
Может кто знает как это сделать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="/">
  <xsl:apply-templates select="/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tr"/>
</xsl:template>

<xsl:template match="w:tr">
  <xsl:value-of select="."/>;
</xsl:template>
</xsl:stylesheet>
Guest_102А как можно узнать номер последнего узла?
Код: plaintext
<xsl:value-of select="count(/w:wordDocument/w:body/wx:sect/wx:sub-section/w:tbl/w:tr)"/>
...
Рейтинг: 0 / 0
23.06.2009, 14:22
    #36055675
Guest_102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование XSLT для извлечения данных из XML
Спасибо, помогло!
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Использование XSLT для извлечения данных из XML / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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