Что нового

как выполнить трансформацию XSLT с помощью AutoIt ?

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Добавил просто строку с указанием шаблона в XML, некрасиво получилось.
Попробовал создать объект нужного типа и его методами сделать, не вышло.
Код:
$docXSL = ObjCreate("MSXML2.DOMDocument.3.0")
$docXSL.Load("trans.xslt")
$docXSL.Transform("test.xml", "res.html")


Подскажите, плиз, как правильно такое сделать.
 

Naisho

Знающий
Сообщения
86
Репутация
12
Чтото вроде этого :

Код:
ConsoleWrite("NOT-FORMATTED ------------------------------------------" & @CRLF)
ConsoleWrite ( $oXML.xml&@crlf)

Local $oReader = ObjCreate("MSXML2.SAXXMLReader")
Local $oWriter = ObjCreate("MSXML2.MXXMLWriter")

$oWriter.indent = True ; this is it

$oReader.contentHandler = $oWriter
$oReader.parse($oXML.xml)

$sFormatted = $oWriter.output

ConsoleWrite("FORMATTED -------------------------------------------" & @CRLF)
ConsoleWrite($sFormatted & @CRLF)
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вот беру как это делается на java http://www.uhlib.ru/kompyutery_i_internet/xslt/p15.php
По образу и подобию выписываю скрипт AutoIt
Код:
$docXML = ObjCreate("MSXML2.DOMDocument.3.0")
ConsoleWrite("err1 = "&@error&@CRLF)
$docXSL = ObjCreate("MSXML2.DOMDocument.3.0")
ConsoleWrite("err2 = "&@error&@CRLF)

$docXML.async = False
$docXML.load (@ScriptDir&"\test.xml")
ConsoleWrite("err3 = "&@error&@CRLF)

$docXSL.async = False
$docXSL.load (@ScriptDir&"\transRU.xslt")
ConsoleWrite("err4 = "&@error&@CRLF)

$strOutput = $docXML.transformNode($docXSL)
ConsoleWrite("err5 = "&@error&@CRLF)
FileWrite("res.html",$strOutput)
ConsoleWrite("err = "&@error&@CRLF)

И в консоли четко вижу что ругается вызов метода transformNode.
Но что не так не могу понять.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Файл 20793.xml UTF-8
XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <item>
     <title>Как выполнить трансформацию XSLT с помощью AutoIt?</title>
     <user>C2H5OH</user>
     <sex>Мужской</sex>
     <age>нет данных</age>
     <registration_date>Декабрь 02, 2011, 12:57:58</registration_date>
     <last_activity>1985</last_activity>
   </item>
</root>
Файл 20793.xslt UTF-8
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
   <html>
   <body>
   <h5>Русское сообщество AutoIt » Общий раздел по AutoIt » Общие вопросы по AutoIt</h5>
   <table border="1">
     <tr bgcolor="#9acd32">
       <th style="text-align:left">Title</th>
       <th style="text-align:left">User</th>
     </tr>
     <xsl:for-each select="root/item">
     <tr>
       <td><xsl:value-of select="title" /></td>
       <td><xsl:value-of select="user" /></td>
     </tr>
     </xsl:for-each>
   </table>
   </body>
   </html>
</xsl:template>

</xsl:stylesheet>
Пример:
Код:
$docXML = ObjCreate("MSXML2.DOMDocument.3.0")
$docXML.async = False
$docXML.load(@ScriptDir & "\20793.xml")
If ($docXML.parseError.errorCode <> 0) Then
   $oErr = $docXML.parseError
   ConsoleWrite(StringFormat("ERROR %s: %s\n", @ScriptLineNumber, $oErr.reason))
Else
   $docXSL = ObjCreate("MSXML2.DOMDocument.3.0")
   $docXSL.async = False
   $docXSL.load(@ScriptDir & "\20793.xslt")
   If ($docXML.parseError.errorCode <> 0) Then
	  $oErr = $docXSL.parseError
	  ConsoleWrite(StringFormat("ERROR %s: %s\n", @ScriptLineNumber, $oErr.reason))
   Else
	  $strOutput = $docXML.transformNode($docXSL)
	  FileWrite("res.html",$strOutput)
	  ConsoleWrite(StringFormat("File res.html written!\n"))
   EndIf
EndIf
 
Верх