|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
Возникла необходимость осуществлять массовые преобразования текста в XML представлениях схем от Visio 2003. Собственно: берём файл со схемами подготовленными с помощью Visio 2003, сохраняем его в виде XML текста (".MyFile.vdx"), а затем осуществляем всякие разные преобразования одних документов XML в другие. Преобразование осуществляется с помощью типового MS процессора XML, например, с помощью такого vbs скрипта: sub see_tables() Dim xml, xsl Dim s 'as String Dim i 'as Integer Dim args set args = WScript.Arguments set xml = CreateObject("Msxml2.DOMDocument.4.0") set xsl = CreateObject("Msxml2.DOMDocument.4.0") s = args(0) xml.async = false xml.load s s = args(1) xsl.async = false xsl.load s s = xml.documentElement.transformNode(XSL.documentElement) WScript.Echo s exit sub end sub see_tables Вызов скрипта: cscript myscript.vbs myFile.vdx myConverter.xsl Конвертер myConverter.xsl: <?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:wx=" http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:vis="urn:schemas-microsoft-com:office:visio" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:visio2002-sdk" > <xsl:output method="xml" standalone="yes" /> <xsl:template match="/vis:VisioDocument"> <xsl:text disable-output-escaping="yes"><VisioDocument></xsl:text> <!-- xsl:value-of select="." / --> <xsl:apply-templates select="child::node()"/> <xsl:text disable-output-escaping="yes"></VisioDocument></xsl:text> </xsl:template> <xsl:template match="vis:DocumentProperties |vis:DocumentSettings |vis:Colors |vis:PrintSetup |vis:Fonts |vis:StyleSheets |vis:DocumentSheet |vis:Masters |vis:Pages |vis:Windows |vis:EventList |vis:VBProjectData " > <xsl:text></xsl:text> <xsl:copy-of select="." /> </xsl:template> <xsl:template match="text()"> <xsl:text></xsl:text> </xsl:template> </xsl:stylesheet> По идее такое преобразование должно создать почти копию входного vdx файла. Но возникает вопрос: Какие теги надо указать в xsl файле, чтобы русские буквы сохранённые в utf-8 в исходном vdx файле, были скопированы в той же кодировке в выходной vdx файл. Вместо этого появляются какие-то однобайтовые символы-кракозябры, которые Visio 2003 на вход вовсе не берёт, ругается, что не та кодировка. Как преодолеть сие? С уважением, Казаков С.А. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2015, 18:10 |
|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
KA3AKOBКак преодолеть сие?Выходная кодировка указывается в <xsl:output>. Это с одной стороны. А с другой transformNode() кладет на <xsl:output>. Чтобы он учитывался, нужно использовать transformNodeToObject() ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2015, 18:33 |
|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
Спасибо за ответ! Но! Не работает. Привожу пример на VBScript. sub see_tables() Dim xml, xsl 'as DOMDocument Dim s 'as String Dim args Dim fso 'As Scripting.FileSystemObject Dim txt ' As Scripting.TextStream set args = WScript.Arguments set xml = CreateObject("Msxml2.DOMDocument.6.0") set xsl = CreateObject("Msxml2.DOMDocument.6.0") set txt = CreateObject("Msxml2.DOMDocument.6.0") s = args(0) xml.async = false xml.load s s = args(1) xsl.async = false xsl.load s s = args(2) if (s="") then s = "bbb.out" end if 's = xml.documentElement.transformNode (XSL.documentElement) 'WScript.Echo s 'Set fso = CreateObject("Scripting.FileSystemObject") 'Set txt = fso.CreateTextFile(s, -1, -1) xml.documentElement.transformNodeToObject XSL.documentElement, txt txt.Save s exit sub end sub see_tables Как видно из примера, если задавать для процедуры transformNodeToObject вторым параметром txt as DOMDocument, то выходной файл bbb.out пустой. Если же задавать txt как Stream, то процедура transformNodeToObject такой объект не берёт, даёт ошибку. Касательно основного вопроса: поскольку скрипт я запускал либо из cmd.exe, либо из Far'a (а как ещё можно скрипт запустить?), то эти досовские программы как-то сами решают о преобразованиях кодовых таблиц (codepage). Попытался переписать на VBA Excel: Private Sub CommandButton1_Click() Dim xml As MSXML2.DOMDocument Dim xsl As MSXML2.DOMDocument Dim xml_elem As MSXML2.IXMLDOMElement Dim xsl_elem As MSXML2.IXMLDOMElement Dim s, pth As String Dim out As MSXML2.DOMDocument Set xml = CreateObject("Msxml2.DOMDocument.6.0") Set xsl = CreateObject("Msxml2.DOMDocument.6.0") pth = Application.ActiveWorkbook.Path s = pth & "\" & Me.Cells(1, 1).Value xml.async = False xml.Load s If (Not (xml.parsed)) Then MsgBox "xml not parsed" End If Set xml_elem = xml.documentElement s = pth & "\" & Me.Cells(1, 2).Value xsl.async = False xsl.Load s If (Not (xsl.parsed)) Then MsgBox "xsl not parsed" End If Set xsl_elem = xml.documentElement s = pth & "\" & Me.Cells(2, 2).Text Open s For Output As #6 s = xml_elem.transformNode(xsl_elem) Write #6, s out.Save s Close #6 Exit Sub end sub тот требует какого-то непонятного атрибута: Отсутствует необходимый атрибут "{ http://www.w3.org/1999/XSL/Transform}version" Между тем атрибут version="1.0" указан. С уважением, Казаков С.А. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 17:40 |
|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
KA3AKOBвторым параметром txt as DOMDocumentГде код? KA3AKOBЕсли же задавать txt как Stream, то процедура transformNodeToObject такой объект не берёт, даёт ошибку.Т.е. почитать документацию и узнать какие параметры принимает метод - не судьба? KA3AKOBэти досовские программыО как! KA3AKOBкак-то сами решают о преобразованиях кодовых таблиц (codepage).Чушь! KA3AKOBКасательно основного вопросаКасательно основного вопроса я Вам все детально изложил здесь 17525936 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 18:13 |
|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
Да, и почитайте вот это ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 18:14 |
|
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
|
|||
---|---|---|---|
#18+
KA3AKOB Код: vbnet 1.
Совет, чтобы не угадывать параметры методов, перед написанием кода читать документацию xml.documentElement.transformNodeToObject(XSL, txt)[/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 18:19 |
|
|
start [/forum/topic.php?fid=14&fpage=10&tid=1332218]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 194ms |
0 / 0 |