Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Не получается трансформация WordXml в XSL / 6 сообщений из 6, страница 1 из 1
10.08.2011, 11:19
    #37388597
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
Здравствуйте, 11091114 - здесь находится файлик ворда к которому хочу сделать трансформацию для получения данных из таблички. Пробовал написать по аналогии с ексельным преобразованием и получилось такой xsl:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?xml version="1.0"?>
<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:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
 <xsl:output method="xml" encoding="windows-1251" omit-xml-declaration="no" indent="yes" media-type="text/xml"/>
 <xsl:template match="/">
  <VFPdata>
   <xsl:for-each select="w:body/wx:sect/w:tbl/w:tr">
    <xsl:choose>
     <xsl:when test="position() != number('1')">
      <f_w>
       <xsl:for-each select="w:tc">
        <xsl:choose>
         <xsl:when test="position() = number('1')">
          <code>
           <xsl:value-of select="w:p/w:r/w:t/text()"/>
          </code>
         </xsl:when>
         <xsl:when test="position() = number('2')">
          <name_service>
           <xsl:value-of select="w:p/w:r/w:t/text()"/>
          </name_service>
         </xsl:when>
         <xsl:when test="position() = number('3')">
          <price>
           <xsl:value-of select="w:p/w:r/w:t/text()"/>
          </price>
         </xsl:when>
        </xsl:choose>
       </xsl:for-each>
      </f_w>
     </xsl:when>
    </xsl:choose>
   </xsl:for-each>
  </VFPdata>
 </xsl:template>
</xsl:stylesheet>
но получается только "пустая рыба" :
Код: plaintext
1.
2.
<?xml version="1.0" encoding="windows-1251"?>
<VFPdata xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
</VFPdata>

Мне кажется данные не выводятся из-за неправильной адресации, но я не понимаю почему она не правильна.
И я не совсем понял как пользоваться осями в данном случае. Они вроде как очень подходят, но как с их помощью указать какой именно узел мне нужен?
Спасибо.
...
Рейтинг: 0 / 0
10.08.2011, 11:31
    #37388643
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
Игорь ГорбоносМне кажется данные не выводятся из-за неправильной адресации, но я не понимаю почему она не правильна.Потому что после корня (/) идет w:wordDocument, а не w:body. И вообще мусора много.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" ?>
<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:wx="http://schemas.microsoft.com/office/word/2003/auxHint">
	<xsl:output method="xml" encoding="windows-1251" omit-xml-declaration="no" indent="yes" media-type="text/xml" />
	<xsl:template match="/">
		<VFPdata>
			<xsl:apply-templates select="w:wordDocument/w:body/wx:sect/w:tbl/w:tr[position()>1]"/>
		</VFPdata>
	</xsl:template>
	<xsl:template match="w:tr">
		<f_w>
			<code><xsl:value-of select="w:tc[1]/w:p/w:r/w:t" /></code>
			<name_service><xsl:value-of select="w:tc[2]/w:p/w:r/w:t" /></name_service>
			<price><xsl:value-of select="w:tc[3]/w:p/w:r/w:t" /></price>
		</f_w>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
10.08.2011, 12:04
    #37388746
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
> Автор: Antonariy


Странно, в
VBS
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Set objXML = CreateObject("Msxml2.DOMDocument")
Set xsl = Createobject("MSXML2.DOMDocument")
Set XML = Createobject("MSXML2.DOMDocument")
' Загружаем полученный XML
XML.Async = False
XML.load("C:\1_1\3т_first.xml")

' Загружаем схему преобразования для получения данных из XML
xsl.Async = False
xsl.load("C:\1_1\3t_2.xsl")

' Проводим трансформацию и получаем нужный XML
transformXML = XML.transformNode(xsl)
objXML.loadXML(transformXML)
objXML.save("c:\1_1\rezult.xml")

Set objXML = Nothing
Set xsl = Nothing
Set XML = Nothing

MsgBox(transformXML)
нормально отрабатывает и твой и мой(с твоей поправкой о w:wordDocument) коды. А
практически этот-же код но на фокспро выдает пустой результат

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.08.2011, 12:16
    #37388778
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
Ага, есть всякие грабли у transformNode.
10508784
...
Рейтинг: 0 / 0
10.08.2011, 12:41
    #37388850
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
> Автор: Antonariy
> Ага, есть всякие грабли у transformNode.


А где их нет
но у меня были грабли в другом:
* Файл ворда сохранен в юникоде. Поэтому при чтении этого файла в переменную сразу конвертируем в нужную кодировку
* и т.к. файл в чистом юникоде первым символом идет BOM. После преобразования этот BOM вырезаем, иначе он мешает
обрабатывать XML
xm(SUBSTR(Strconv(Strconv(Strtran(FILETOSTR("C:\1_1\3т_first.xml"), [encoding="UTF-8"],
[encoding="windows-1251"]),11),2),2))
* Или-же скармливать XMLю путь к файлу и тогда он сам корректно его загружает


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.08.2011, 12:41
    #37388852
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается трансформация WordXml в XSL
> Автор: Игорь Горбонос

Блин! забыл!

Спасибо за помощь :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Не получается трансформация WordXml в XSL / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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