powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
6 сообщений из 6, страница 1 из 1
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38938578
KA3AKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникла необходимость осуществлять массовые преобразования текста в 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 на вход вовсе не берёт, ругается, что не та кодировка. Как преодолеть сие?

С уважением,
Казаков С.А.
...
Рейтинг: 0 / 0
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38938612
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KA3AKOBКак преодолеть сие?Выходная кодировка указывается в <xsl:output>.

Это с одной стороны. А с другой transformNode() кладет на <xsl:output>. Чтобы он учитывался, нужно использовать transformNodeToObject()
...
Рейтинг: 0 / 0
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38941845
KA3AKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ!
Но! Не работает.
Привожу пример на 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" указан.

С уважением,
Казаков С.А.
...
Рейтинг: 0 / 0
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38941877
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KA3AKOBвторым параметром txt as DOMDocumentГде код?
KA3AKOBЕсли же задавать txt как Stream, то процедура transformNodeToObject такой объект не берёт, даёт ошибку.Т.е. почитать документацию и узнать какие параметры принимает метод - не судьба?
KA3AKOBэти досовские программыО как!
KA3AKOBкак-то сами решают о преобразованиях кодовых таблиц (codepage).Чушь!
KA3AKOBКасательно основного вопросаКасательно основного вопроса я Вам все детально изложил здесь 17525936
...
Рейтинг: 0 / 0
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38941879
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и почитайте вот это
...
Рейтинг: 0 / 0
Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
    #38941884
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KA3AKOB
Код: vbnet
1.
xml.documentElement.transformNodeToObject XSL.documentElement, txt

Совет, чтобы не угадывать параметры методов, перед написанием кода читать документацию
xml.documentElement.transformNodeToObject(XSL, txt)[/SRC]
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как осуществлять преобразование .vdx схем Visio 2003 с помощью XSLT?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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