powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Не получается трансформация WordXml в XSL
6 сообщений из 6, страница 1 из 1
Не получается трансформация WordXml в XSL
    #37388597
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, 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
Не получается трансформация WordXml в XSL
    #37388643
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносМне кажется данные не выводятся из-за неправильной адресации, но я не понимаю почему она не правильна.Потому что после корня (/) идет 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
Не получается трансформация WordXml в XSL
    #37388746
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 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
Не получается трансформация WordXml в XSL
    #37388778
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, есть всякие грабли у transformNode.
10508784
...
Рейтинг: 0 / 0
Не получается трансформация WordXml в XSL
    #37388850
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 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
Не получается трансформация WordXml в XSL
    #37388852
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос

Блин! забыл!

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

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


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